¿Qué significa que ChannelFactory tenga una propiedad estatal? Entiendo que un canal creado puede tener estados basados en la conexión. Pero estoy confundido sobre por qué ChannelFactory también tiene tales estados de conexión. ¿Se conecta también al servicio WCF?WCF ChannelFactory Propiedad estatal
Respuesta
Creo que esto es interesante, no sé la respuesta pero me atrevería a suponer que ChannelFactory puede mantener los recursos disponibles en caso de que otras instancias de canal utilicen el mismo recurso (ya sea simultáneamente o en un futuro próximo) .
Por ejemplo, si utiliza una fábrica de canales con una pila de canales que utiliza TcpChannel como canal de transporte, ChannelFactory puede gestionar la conexión TCP ya que varios canales podrían reutilizar la misma conexión TCP, esto ahorra sobre la sobrecarga de rendimiento al derribar/reiniciar la conexión.
Entonces cuando cierra su canal, el canal notifica a la fábrica de canales que el recurso ya no es necesario, la fábrica del canal libera el recurso cuando lo considere oportuno (es decir, después de un tiempo de espera?).
Puedo verificar esto si este es el caso si nadie más proporciona una buena respuesta.
Un objeto ChannelFactory
tiene una State
porque es un CommunicationObject
, y todos CommunicationObjects
en WCF tener un State
. Por supuesto, eso es solo una mera pregunta, y no realmente útil.
La verdadera cuestión se reduce a dos partes
- ¿Por qué
ChannelFactory
derivan deCommunicationObject
- Lo hace su
State
significa en realidad?
El segundo es más fácil de responder, así que comencemos allí. El State
de ChannelFactory determina si se puede usar o no para crear nuevos canales de cliente, y, ya sea que esos canales de cliente aún puedan ser utilizados o no.
Como con todos CommunicationObjects
en WCF, el State
determina qué operaciones tiene permitido hacer con el objeto. Una fábrica de canales realmente solo tiene una operación: CreateChannel
. Si la fábrica es Open
, puede crear canales; si es Closed
o Faulted
, no puede. Las implementaciones de fábrica de canales de hormigón (por ejemplo, y HttpChannelFactory
) limpian los recursos internos cuando son Close()
'd; esto incluye la liberación de recursos que fueron creados por motivos de seguridad, la liberación de asas para canalizaciones con nombre, etc.
Además, cuando Close()
una fábrica de canal, se realiza un bucle a través de todos los canales y llama Close()
en cada uno de ellos, antes de la transición en un estado Closed
. (Parece que existe un código de utilidad común (creación de solicitudes HTTP, etc.) que las fábricas del canal implementan en nombre de sus canales, de modo que los canales ya no pueden funcionar una vez que se cerró la fábrica de canales. Esta es la razón por la cual los canales son cierre forzado al mismo tiempo.)
Para todos los detalles morbosos, vaya descargar el WCF Reference Source, pero estar preparado para perder un día o así :)
La gran pregunta, entonces, es por qué un ChannelFactory
es una CommunicationObject
en absoluto? Aquí, estoy recurriendo a adivinar, porque hasta donde puedo ver los objetos de fábrica nunca se comunican al sistema remoto en realidad. Sin embargo, realizan una gran cantidad de configuración y validación de los parámetros de su enlace antes de que creen un canal, lo que requiere asignar los mismos tipos de recursos que una conexión de red real. La fábrica de canales de canalización nombrada, por ejemplo, crea y administra un grupo de conexiones para sus canales; las fábricas de canales HTTP y HTTPS validan la información de identidad y los valores de autenticación. Mi conjetura es que las fábricas de canales hacen que esta configuración funcione una vez, por lo que los canales pueden omitirla; el patrón CommunicationObject
simplemente proporcionaba una forma conveniente de administrar la vida útil de una fábrica de canales, ya que todo lo demás en WCF se gestiona de esa manera.
Sospecho que todos los canales pasan por la fábrica de canales. Piense en ello como un punto final de patrón de peso mosca y configuración de enlace, y el estado de la conexión. Técnicamente, el 'ChannelFactory' sería el objeto a cargo de la conexión. El canal solo expone el contrato. – Gusdor
- 1. Configuración de WCF ChannelFactory fuera de App.config?
- 2. Generación de proxy wcf frente a ChannelFactory
- 3. propiedad WCF maxConnections
- 4. Monotouch y WCF: diferencia de SVCUTIL.EXE y SLSVCUTIL.EXE y cómo evitar ChannelFactory genérico no compatible?
- 5. Monotouch/WCF: cómo consumir el servicio wcf sin svcutil
- 6. Credenciales ChannelFactory + objeto es de sólo lectura
- 7. La propiedad Address en ChannelFactory.Endpoint era nula. El punto final de ChannelFactory debe tener una dirección válida especificada
- 8. ¿Algún acercamiento matemático al manejo estatal de objetos complejos?
- 9. ¿Cómo garantizar que el WCF ChannelFactory utiliza los valores de encuadernación en la configuración XML (MaxArrayLength se ignora)
- 10. WCF: DataMember atributo en la propiedad vs. miembro de
- 11. Cómo configurar clientes para un servicio wcf?
- 12. WCF contrato desajuste problema
- 13. Configure un MaxItemsInObjectGraph de un cliente WCF al usar Unity
- 14. El InstanceContext proporcionado a ChannelFactory contiene un UserObject que no implementa el CallbackContractType
- 15. Creación de un singleton ChannelFactory <T> y reutilización para conexiones de clientes
- 16. WCF Duplex Callback Sample failure
- 17. ¿Cuál es la mejor manera, utilizando el patrón de diseño "estatal", para cambiar los estados?
- 18. WCF/WCF Data Services/Servicios WCF RIA
- 19. Terrible rendimiento con WCF y certificados (autenticación mutua)
- 20. WCF REST Servicio: InstanceContextMode.PerCall no funciona
- 21. error DataContractSerializer utilizando Entity Framework 4.0 con WCF 4.0
- 22. WCF error de Windows de seguridad de autenticación
- 23. WCF Read DataMember Name attribute
- 24. programático WCF mensaje de seguridad con certificados
- 25. Descripción de ServiceKnownType en WCF
- 26. WCF IncludeExceptionDetailInFaults programmatically?
- 27. ¿El límite máximo de la propiedad de configuración MaxReceivedMessageSize en wcf afecta el rendimiento del servicio?
- 28. ¿Dónde poner la propiedad MaxReceivedMessageSize en el archivo web.config del servicio WCF?
- 29. Wcf Autenticación básica
- 30. WCF Serialization Exception - NetDataContractSerializer
Creo que esta es una buena pregunta, y una que también me interesa. Sorprendido, nadie lo apuñaló. – Xiaofu