Partager via


Vue d'ensemble du modèle de canal

La pile de canaux Windows Communication Foundation (WCF) est une pile de communication en couches avec un ou plusieurs canaux qui traitent les messages. Le canal de transport, qui figure tout en bas de la pile, est chargé d'adapter la pile de canaux au transport sous-jacent (par exemple, au transport TCP, HTTP, SMTP ainsi qu'à d'autres types de transports). Les canaux fournissent un modèle de programmation de bas niveau pour l'envoi et la réception des messages. Ce modèle de programmation s’appuie sur plusieurs interfaces et autres types désignés collectivement par le terme « modèle de canal WCF ». Cette rubrique aborde les thèmes suivants : formes de canal, construction d'un écouteur de canal de base (côté service) et fabrication de canal (côté client).

Pile de canaux

Les points de terminaison WCF communiquent avec le reste du monde à l’aide d’une pile de communication appelée « pile de canaux ». Le diagramme suivant compare la pile de canaux avec d'autres piles de communication, notamment avec la pile TCP/IP.

Channel Model

Pour commencer, leurs points communs : chaque couche de la pile fournit une abstraction du monde figurant en dessous d'elle et expose cette abstraction uniquement à la couche se trouvant immédiatement au-dessus d'elle. Chaque couche utilise uniquement l'abstraction de la couche se trouvant immédiatement en dessous d'elle. Lorsque deux piles communiquent, chacune de leurs couches communique avec la couche lui correspondant de l'autre pile, par exemple la couche IP avec la couche IP, la couche TCP avec la couche TCP, etc.

À présent, leurs différences : alors que la pile TCP a été conçue pour fournir une abstraction du réseau physique, la pile de canaux a été conçue pour fournir une abstraction de la manière dont les messages sont remis, à savoir le transport, mais également pour fournir d’autres fonctionnalités permettant de connaître le contenu des messages, le protocole utilisé pour communiquer (notamment le transport), etc. Par exemple, l’élément de liaison de session fiable fait partie de la pile de canaux mais ne figure pas en dessous du transport ou du transport lui-même. Pour obtenir une abstraction, le canal inférieur dans la pile doit adapter le protocole de transport sous-jacent à l'architecture de la pile de canaux, puis en s'appuyant sur les canaux figurant plus haut dans la pile doit fournir des fonctionnalités de communication, notamment en matière de garanties de fiabilité et de sécurité.

Les messages circulent via la pile de communication sous forme d'objets Message. Comme illustré sur le schéma ci-dessus, le canal inférieur est appelé canal de transport. Ce canal est chargé de l'envoi des messages depuis leur expéditeur et de leur réception par leur destinataire. Il lui incombe notamment de transformer l'objet Message dans le format utilisé pour communiquer avec les autres correspondants. Au-dessus de ce canal de transport, peuvent figurer un nombre indéfini de canaux de protocole, chacun d'entre eux offrant des fonctionnalités de communication spécifiques, par exemple en matière de garantie de remise fiable. Les canaux de protocole interviennent sur les messages qui circulent dans la pile sous forme d'objet Message. En principe, leur tâche consiste à transformer ces messages, par exemple en y ajoutant des en-têtes ou en chiffrant leur contenu. Elle peut également consister à envoyer ou recevoir leurs propres messages de contrôle de protocole, par exemple des accusés de réception.

Formes de canal

Chaque canal implémente une ou plusieurs interfaces également désignées par les termes « interfaces de forme de canal » ou « formes de canal ». Ces formes de canal fournissent des méthodes orientées communication, par exemple les méthodes « envoyer et recevoir » ou « demande-réponse » implémentées par le canal ou appelées par l'utilisateur du canal. L’interface IChannel constitue l’élément de base des formes de canal. Elle fournit en outre une méthode GetProperty<T> conçue sous forme de mécanisme en couches qui permet d’accéder aux fonctionnalités arbitraires exposées par les canaux de la pile. Les cinq formes de canal qui étendent un objet IChannel sont :

À chacune de ces formes correspond un équivalent qui étend System.ServiceModel.Channels.ISessionChannel<TSession> pour prendre en charge des sessions. Ces règles sont les suivantes :

Les modèles des formes de canal s’inspirent de certains des principaux modèles d’échange de messages pris en charge par les protocoles de transport existants. Par exemple, la messagerie unidirectionnelle correspond à une paire IInputChannel/IOutputChannel, la demande-réponse correspond aux paires IRequestChannel/IReplyChannel et les communications duplex bidirectionnelles correspondent à IDuplexChannel (ce qui étend à la fois IInputChannel et IOutputChannel).

Programmation avec la pile de canaux

Les piles de canaux sont créées en principe à l'aide d'un modèle de fabrication, plus précisément à l'aide de liaisons. Du côté expédition, une liaison est utilisée pour générer une fabrication ChannelFactory, qui génère ensuite une pile de canaux et renvoie une référence au canal figurant en haut de la pile. L'application peut utiliser ensuite ce canal pour envoyer des messages. Pour plus d’informations, consultez Programmation au niveau du canal client.

Du côté réception, une liaison est utilisée pour générer un écouteur IChannelListener, qui écoute les messages entrants. L'écouteur IChannelListener envoie des messages à l'application écoutant en créant des piles de canaux et en remettant la référence d'application au canal supérieur. L'application utilise ensuite ce canal pour recevoir les messages entrants. Pour plus d’informations, consultez Programmation de service au niveau du canal.

Modèle d'objet de canal

Le modèle d'objet de canal correspond à l'ensemble principal d'interfaces nécessaire à l'implémentation des canaux, des écouteurs de canal et des fabrications de canaux. Certaines classes de base sont également disponibles pour faciliter les implémentations personnalisées.

Les écouteurs de canal sont chargés d'écouter les messages entrants, puis de les remettre à la couche supérieure à l'aide des canaux qu'ils ont eux-mêmes créés.

Les fabrications de canaux sont chargées de créer les canaux utilisés pour l'envoi des messages et de fermer ces mêmes canaux à leur propre fermeture.

ICommunicationObject est la principale interface qui définit la machine à états de base que tous les objets de communication implémentent. CommunicationObject fournit une implémentation de cette interface principale dont d'autres classes de canal peuvent dériver au lieu de réimplémenter l'interface. Toutefois, ceci n'est pas obligatoire : un canal personnalisé peut implémenter ICommunicationObject directement et ne pas hériter de CommunicationObject. Aucune des classes de l'illustration 3 n'est considérée comme faisant partie du modèle de canal. Elles sont disponibles afin d'aider les implémenteurs de canaux personnalisés à construire ces derniers.

Channel model

Les rubriques suivantes contiennent des informations sur le modèle d'objet de canal ainsi que sur diverses zones de développement qui facilitent la construction de canaux personnalisés.

Rubrique Description
Service : Écouteurs de canal et canaux Contient des informations sur les écouteurs de canal, qui écoutent les canaux entrants dans une application de service.
Client : Fabrications de canaux et canaux Contient des informations sur les fabrications de canaux, lesquelles créent des canaux pour pouvoir se connecter aux applications de service.
Fonctionnement des modifications d'état Contient des informations qui expliquent comment l'état des modèles d'interface System.ServiceModel.ICommunicationObject change dans les canaux.
Sélection d’un modèle d’échange de messages Présente les six modèles d’échange de messages de base pris en charge par les canaux.
Gestion des exceptions et des erreurs Contient des instructions indiquant comment gérer les erreurs et les exceptions qui surviennent sur les canaux personnalisés.
Prise en charge de la configuration et des métadonnées Contient des instructions indiquant comment procéder pour assurer la prise en charge des canaux personnalisés à partir du modèle d’application ainsi que pour exporter et importer des métadonnées à l’aide de liaisons et d’éléments de liaison.