Partager via


Création d’un élément de liaison

Les liaisons et les éléments de liaison (objets qui étendent respectivement System.ServiceModel.Channels.Binding et System.ServiceModel.Channels.BindingElement) correspondent à l’emplacement où le modèle d’application Windows Communication Foundation (WCF) est associé aux fabriques de canaux ainsi qu’aux écouteurs de canal. Sans connexions, l’utilisation de canaux personnalisés nécessite une programmation au niveau du canal, comme décrit dans Programmation Channel-Level du service et Programmation Channel-Level du client. Cette rubrique décrit la condition minimale requise pour permettre l'utilisation de votre canal dans WCF, le développement d’un BindingElement spécifique à votre canal, et l'utilisation à partir de l’application, comme décrit à l’étape 4 du développement de canaux.

Aperçu

La création d’un BindingElement pour votre canal permet aux développeurs de l’utiliser dans une application WCF. BindingElement les objets de la classe System.ServiceModel.ServiceHost peuvent être utilisés pour connecter une application WCF à votre canal de communication sans avoir besoin de connaître les informations de type précises de votre canal.

Une fois qu’un BindingElement canal a été créé, vous pouvez activer davantage de fonctionnalités en fonction de vos besoins en suivant les étapes de développement de canal restantes décrites dans Développement de canaux.

Ajout d’un élément de liaison

Pour implémenter une classe personnalisée BindingElement, écrivez une classe qui hérite de BindingElement. Par exemple, si vous avez développé un ChunkingChannel qui peut diviser les messages volumineux en blocs et les réassembler à l’autre extrémité, vous pouvez utiliser ce canal dans n’importe quelle liaison en implémentant une BindingElement liaison et en configurant la liaison pour l’utiliser. Le reste de cette rubrique utilise l’exemple ChunkingChannel comme exemple pour illustrer les exigences d’implémentation d’un élément de liaison.

A ChunkingBindingElement est responsable de la création du ChunkingChannelFactory et ChunkingChannelListener. Il remplace les implémentations de CanBuildChannelFactory et CanBuildChannelListener, et vérifie que le paramètre de type est IDuplexSessionChannel (dans notre exemple, c'est la seule forme de canal prise en charge par le ChunkingChannel) et que les autres éléments de liaison dans la liaison prennent en charge cette forme de canal.

BuildChannelFactory vérifie d’abord que la forme de canal demandée peut être générée, puis obtient une liste d’actions de message à segmenter. Cette méthode crée ensuite une fabrication ChunkingChannelFactory en lui passant la fabrication de canal interne. Remarque : si vous créez un élément de liaison de transport, cet élément est le dernier dans la pile de liaison. Vous devez, par conséquent, créer un écouteur de canal ou une fabrication de canal.

BuildChannelListener utilise une implémentation similaire pour créer ChunkingChannelListener et lui passer l'écouteur de canal interne.

Comme autre exemple utilisant un canal de transport, l’exemple Transport : UDP fournit le remplacement suivant.

Dans l’exemple, l’élément de liaison est UdpTransportBindingElement, qui dérive de TransportBindingElement. Dans le code ci-dessous se rapportant à notre exemple, les méthodes suivantes sont substituées pour générer les fabrications associées au canal.

public IChannelFactory<TChannel> BuildChannelFactory<TChannel>(BindingContext context)  
{  
    return (IChannelFactory<TChannel>)(object)new UdpChannelFactory(this, context);  
}  
  
public IChannelListener<TChannel> BuildChannelListener<TChannel>(BindingContext context)  
{  
    return (IChannelListener<TChannel>)(object)new UdpChannelListener(this, context);  
}  

Il contient également des membres permettant de cloner BindingElement et de retourner notre schéma (soap.udp).

Éléments de liaison du protocole

De nouveaux éléments de liaison peuvent remplacer ou augmenter l’un des éléments de liaison inclus, en ajoutant de nouveaux transports, encodages ou protocoles de niveau supérieur. Pour créer un élément de liaison de protocole, commencez par étendre la BindingElement classe. À un minimum, vous devez ensuite implémenter BindingElement.Clone et ChannelProtectionRequirements en utilisant IChannel.GetProperty. Cette opération renvoie le ChannelProtectionRequirements pour cet élément de liaison. Pour plus d’informations, consultez ChannelProtectionRequirements.

Clone doit retourner une nouvelle copie de cet élément de liaison. Comme meilleure pratique, nous recommandons aux auteurs d'éléments de liaison d’implémenter Clone en utilisant un constructeur de copie qui appelle le constructeur de copie de base, puis clone tous les champs supplémentaires de cette classe.

Éléments de liaison de transport

Pour créer un élément de liaison de transport, étendez l’interface TransportBindingElement . Au minimum, vous devez implémenter la Clone méthode et la TransportBindingElement.Scheme propriété.

Clone doit retourner une nouvelle copie de cet élément de liaison. En tant que bonne pratique, nous recommandons aux auteurs des éléments de liaison d’implémenter "Clone" par le biais d’un constructeur de copie qui appelle le constructeur de copie de base, puis clone tous les champs supplémentaires de cette classe.

Scheme : la Scheme propriété get retourne le schéma d’URI pour le protocole de transport représenté par l’élément de liaison. Par exemple, à partir de leurs propriétés respectives System.ServiceModel.Channels.HttpTransportBindingElement, le System.ServiceModel.Channels.TcpTransportBindingElement et le Scheme retournent « http » et « net.tcp ».

Éléments de liaison d’encodage

Pour créer de nouveaux éléments de liaison d’encodage, commencez par étendre la BindingElement classe et implémenter la System.ServiceModel.Channels.MessageEncodingBindingElement classe. Au minimum, vous devez alors implémenter les méthodes Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory, et la propriété MessageEncodingBindingElement.MessageVersion.

  • Clone. Retourne une nouvelle copie de cet élément de liaison. Comme meilleure pratique, nous recommandons aux auteurs d'éléments de liaison d’implémenter Clone en utilisant un constructeur de copie qui appelle le constructeur de copie de base, puis clone tous les champs supplémentaires de cette classe.

  • CreateMessageEncoderFactory. Retourne une fabrication MessageEncoderFactory qui fournit un handle à la classe effective, laquelle implémente votre nouvel encodeur et doit étendre MessageEncoder. Pour plus d’informations, consultez MessageEncoderFactory et MessageEncoder.

  • MessageVersion. Retourne le MessageVersion utilisé dans cet encodage, représentant les versions de SOAP et WS-Addressing en cours d'utilisation.

Pour obtenir une liste complète des méthodes et propriétés facultatives pour les éléments de liaison d’encodage définis par l’utilisateur, consultez MessageEncodingBindingElement.

Pour plus d’informations sur la création d’un élément de liaison, consultez Création de liaisons User-Defined.

Une fois que vous avez créé un élément de liaison pour votre canal, revenez à la rubrique Canaux en développement pour voir si vous souhaitez ajouter la prise en charge des fichiers de configuration à votre élément de liaison, si et comment ajouter la prise en charge de la publication de métadonnées, et si et comment construire une liaison définie par l’utilisateur qui utilise votre élément de liaison.

Voir aussi