2010-01-06 4 views
10

Qu'est-ce que cela signifie pour une ChannelFactory d'avoir une propriété State? Je comprends qu'un canal créé peut avoir des états basés sur la connexion. Mais je suis confus quant à savoir pourquoi ChannelFactory a également de tels états de connexion. Est-ce qu'il se connecte aussi au service WCF?Propriété d'état WCF ChannelFactory

+0

Je pense que c'est une bonne question, et je suis également curieux. Personne surpris a eu un coup de couteau. – Xiaofu

Répondre

0

Je pense que c'est intéressant, je ne connais pas la réponse mais je risque de deviner que ChannelFactory peut garder des ressources disponibles au cas où d'autres instances utiliseraient la même ressource (simultanément ou dans un proche avenir) . Par exemple, si vous utilisez une fabrique de canaux avec une pile de canaux qui utilise TcpChannel comme canal de transport, la connexion TCP peut être gérée par ChannelFactory car plusieurs canaux peuvent potentiellement réutiliser la même connexion TCP, ce qui économise sur les frais généraux de la performance de déchirer/ré-initier la connexion. Lorsque vous fermez votre canal, le canal indique à la fabrique de canaux que la ressource n'est plus nécessaire, la fabrique de canaux est alors libre de libérer la ressource lorsqu'elle le juge utile (c'est-à-dire après un délai d'expiration?).

Je peux vérifier si c'est le cas si personne d'autre ne fournit une bonne réponse.

9

Un objet ChannelFactory a une State parce qu'il est un CommunicationObject, et tout CommunicationObjects dans WCF ont un State. Bien sûr, cela ne fait que mendier la question, et pas vraiment utile.

La vraie question se résume à deux parties

  1. Pourquoi ne ChannelFactory dérivent de CommunicationObject
  2. Qu'est-ce fait son State signifie réellement?

Le second est plus facile à répondre, alors commençons par là. Le State d'une ChannelFactory détermine si elle peut ou non être utilisée pour créer de nouveaux canaux clients, et, que ces canaux clients puissent ou non être utilisés.

Comme avec tous les CommunicationObjects dans WCF, le State détermine les opérations que vous êtes autorisé à faire avec l'objet. Une usine de canal n'a vraiment qu'une seule opération: CreateChannel. Si l'usine est Open, vous pouvez créer des canaux; si c'est Closed ou Faulted, vous ne pouvez pas. Les implémentations concrètes d'usine de canal (interne) (disons, et HttpChannelFactory) nettoient toutes les ressources internes quand elles sont Close() 'd; ceci inclut la libération des ressources créées à des fins de sécurité, la libération des poignées dans les canaux nommés, etc.

En outre, lorsque vous êtes Close() une fabrique de canaux, elle parcourt tous les canaux et appelle Close() sur chacun d'entre eux, avant la transition. dans un état Closed lui-même. (Il semble y avoir un code d'utilité commun (création de requêtes HTTP, etc.) que les fabriques de canaux implémentent au nom de leurs canaux, de sorte que les canaux ne peuvent plus fonctionner une fois l'usine de canaux arrêtée. forcé de fermer en même temps.)

Pour tous les détails sordides, allez télécharger le WCF Reference Source, mais soyez prêt à perdre un jour ou :)

La grande question est donc pourquoi ChannelFactory est un CommunicationObject du tout? Ici, je recourt à la devinette, car autant que je peux voir les objets de l'usine eux-mêmes jamais communiquer communiquer au système distant. Cependant, ils effectuent beaucoup d'installation et de validation des paramètres de leur liaison avant de créer un canal, ce qui nécessite d'allouer les mêmes types de ressources qu'une connexion réseau réelle. La fabrique de canaux de canaux nommés, par exemple, crée et gère un pool de connexions pour ses canaux; les fabriques de canaux HTTP et HTTPS valident les informations d'identité et les valeurs d'authentification. Mon suppose que est que les usines de canaux font ce travail d'installation une fois, donc les canaux peuvent l'ignorer; le modèle CommunicationObject a simplement fourni un moyen pratique de gérer la durée de vie d'une fabrique de canaux, puisque tout le reste dans WCF est géré de cette façon.

+0

Je suppose que tous les canaux passent par la fabrique de canaux. Pensez-y comme un point de terminaison de modèle de poids mouche et la configuration de liaison, et l'état de la connexion. Techniquement, le 'ChannelFactory' serait l'objet en charge de la connexion. La chaîne expose juste le contrat. – Gusdor

Questions connexes