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
Répondre
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.
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
- Pourquoi ne
ChannelFactory
dérivent deCommunicationObject
- 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.
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
- 1. WCF ChannelFactory par rapport aux principes SOA?
- 2. WCF ChannelFactory vs génération de proxy
- 3. WCF: Comparaisons entre la fermeture de ChannelFactory et la recréation constante de ChannelFactory et sa fermeture
- 4. ChannelFactory: création et élimination
- 5. Envoi de cookies via WCF à l'aide de ChannelFactory
- 6. Dynamiquement bâtiment ChannelFactory
- 7. ChannelFactory Reuse Strategies
- 8. WCF propriété interne
- 9. Propriété WCF maxConnections
- 10. ChannelFactory statique Global.asax.cs jette CommunicationObjectFaultedException
- 11. Comment créer un DynamicProxy pour un proxy WCF généré par ChannelFactory <T>?
- 12. La propriété Address sur ChannelFactory.Endpoint était null. Le point de terminaison de ChannelFactory doit avoir une adresse valide spécifiée
- 13. Site Web grand public WCF: la propriété Address sur ChannelFactory.Endpoint était null. Le point de terminaison de ChannelFactory doit avoir une adresse valide spécifiée
- 14. WCF Propriété non visible sur le client
- 15. Comment sérialiser une propriété protégée WCF
- 16. Configuration WCF CustomBinding
- 17. ChannelFactory n'a pas d'adresse sur le noeud final, pourquoi?
- 18. C# ChannelFactory: Comment reconnecter/rouvrir une connexion après FaultException | TimeoutException?
- 19. de vérification des pouvoirs ChannelFactory + objet est lu seulement
- 20. WCF Peer to peer causerie
- 21. WCF: Usurpation d'identité client
- 22. Comment exposer les interfaces Propriété via WCF dans VB.NET?
- 23. WCF: DataMember attribut sur la propriété par rapport à
- 24. WCF utilisant ChannelFactory.CreateChannel avec le comportement webHttp
- 25. Besoin d'un moyen de fermer un ChannelFactory lorsque le client ne connaît que l'interface
- 26. WCF: erreur de délai d'attente
- 27. WCF Message.IsFault
- 28. Problèmes de connexion au service WCF via NetNamedPipeBinding
- 29. Quel est le meilleur moyen de fermer un thread WCF?
- 30. Configurer MaxItemsInObjectGraph d'un client WCF lors de l'utilisation de Unity
Je pense que c'est une bonne question, et je suis également curieux. Personne surpris a eu un coup de couteau. – Xiaofu