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. En bas de la pile est un canal de transport qui est chargé d’adapter la pile de canaux au transport sous-jacent (par exemple, TCP, HTTP, SMTP et d’autres types de transport.). Les canaux fournissent un modèle de programmation de bas niveau pour l’envoi et la réception de messages. Ce modèle de programmation s’appuie sur plusieurs interfaces et d’autres types collectivement appelés 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 monde à l’aide d’une pile de communication appelée pile de canaux. Le diagramme suivant compare la pile de canaux à d’autres piles de communication, par exemple TCP/IP.

Modèle de canal

Tout d’abord, les similitudes : dans les deux cas, chaque couche de la pile fournit une abstraction du monde sous cette couche et expose cette abstraction uniquement à la couche directement au-dessus de celle-ci. Chaque couche utilise l’abstraction de la seule couche située en dessous de celle-ci. En outre, lorsque deux piles communiquent, chaque couche communique avec la couche correspondante dans l’autre pile, par exemple, la couche IP communique avec la couche IP et la couche TCP avec la couche TCP, et ainsi de suite.

À présent, les différences : bien que la pile TCP ait été conçue pour fournir une abstraction du réseau physique, la pile de canaux est conçue pour fournir une abstraction non seulement de la façon dont le message est remis, c’est-à-dire le transport, mais également d’autres fonctionnalités telles que ce qui se trouve dans le message ou quel protocole est utilisé pour la communication, y compris le transport, mais beaucoup plus que cela. 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. Cette abstraction est obtenue en exigeant que le canal inférieur de la pile adapte le protocole de transport sous-jacent à l’architecture de la pile de canaux, puis en s’appuyant sur les canaux plus haut dans la pile pour fournir des fonctionnalités de communication telles que des garanties de fiabilité et la sécurité.

Les messages transitent par la pile de communication en tant qu’objets Message . Comme illustré dans la figure ci-dessus, le canal inférieur est appelé canal de transport. Il s’agit du canal responsable de l’envoi et de la réception de messages vers et depuis d’autres parties. Cela inclut la responsabilité de transformer l’objet Message vers et à partir du format utilisé pour communiquer avec d’autres parties. Au-dessus du canal de transport, il peut y avoir n’importe quel nombre de canaux de protocole chacun responsable de la fourniture d’une fonction de communication telle que des garanties de livraison fiables. Les canaux de communication de protocole fonctionnent avec les messages qui circulent à travers eux sous la forme de l’objet Message. Ils transforment généralement le message, par exemple, en ajoutant des en-têtes ou en chiffrant le corps, ou envoyant et recevant leurs propres messages de contrôle de protocole, par exemple, les accusés de réception.

Formes de canal

Chaque canal implémente une ou plusieurs interfaces appelées 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. À la base des formes des canaux se trouve l'interface IChannel, une interface fournissant une méthode GetProperty<T> conçue comme un mécanisme en couches pour accéder aux fonctionnalités arbitraires exposées par les canaux dans 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 formes de canal sont modèleées après certains des modèles d’échange de messages fondamentaux pris en charge par les protocoles de transport existants. Par exemple, la messagerie unidirectionnelle correspond à une IInputChannel/IOutputChannel paire, demande-réponse correspond aux IRequestChannel/IReplyChannel paires et les communications duplex bidirectionnelles correspondent à IDuplexChannel (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 ensuite utiliser ce canal pour envoyer des messages. Pour plus d’informations, consultez Programmation du client Channel-Level.

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

Modèle d'objet du canal

Le modèle objet de canal est l’ensemble principal d’interfaces nécessaires pour implémenter des canaux, des écouteurs de canal et des fabriques de canaux. Il existe également certaines classes de base fournies pour faciliter les implémentations personnalisées.

Les écouteurs de canal sont responsables de l’écoute des messages entrants, puis de les remettre à la couche ci-dessus via les canaux créés par l’écouteur de canal.

Les fabriques de canaux sont responsables de la création de canaux utilisés pour l’envoi de messages et la fermeture de tous les canaux créés lors de la fermeture de la fabrique de canaux.

ICommunicationObject est l’interface principale qui définit l’ordinateur d’état de base implémenté par tous les objets de communication. CommunicationObject fournit une implémentation de cette interface principale à partir de laquelle d’autres classes de canal peuvent dériver plutôt que de réinscrire l’interface. Toutefois, cela n’est pas obligatoire : un canal personnalisé peut implémenter ICommunicationObject directement et ne pas hériter de CommunicationObject. Aucune des classes de la figure 3 n’est considérée comme faisant partie du modèle de canal ; ils sont des helpers disponibles pour les implémenteurs de canaux personnalisés qui souhaitent créer des canaux.

Modèle de canal

Les rubriques suivantes décrivent le modèle objet de canal ainsi que les différents domaines de développement qui aident à créer des canaux personnalisés.

Sujet Descriptif
Service : écouteurs de canal et canaux Décrit les écouteurs de canal, qui écoutent les canaux entrants dans une application de service.
Client : fabrications de canaux et canaux Décrit les fabriques de canaux, qui créent des canaux pour se connecter à une application de service.
Comprendre les changements d’état Décrit comment l’interface System.ServiceModel.ICommunicationObject modélise les changements d’état dans les canaux.
Choix d’un modèle d’échange de messages Décrit les six modèles d’échange de messages de base que les canaux peuvent prendre en charge.
Gestion des exceptions et des erreurs Décrit comment gérer les erreurs et les exceptions dans les canaux personnalisés.
Prise en charge de la configuration et des métadonnées Décrit comment prendre en charge l’utilisation de canaux personnalisés à partir du modèle d’application et comment exporter et importer des métadonnées à l’aide de liaisons et d’éléments de liaison.