2010-01-06 12 views
10

¿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

+0

Creo que esta es una buena pregunta, y una que también me interesa. Sorprendido, nadie lo apuñaló. – Xiaofu

Respuesta

0

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.

9

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

  1. ¿Por quéChannelFactory derivan de CommunicationObject
  2. 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.

+0

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

Cuestiones relacionadas