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 liaisons, l’utilisation de canaux personnalisés nécessite une programmation au niveau du canal, comme expliqué dans Programmation de service au niveau du canal et Programmation au niveau du canal client. Cette rubrique aborde les spécifications minimales vous permettant d’utiliser votre canal dans WCF, de développer un BindingElement pour celui-ci et de permettre l’utilisation à partir de l’application, comme expliqué à l’étape 4 de Développement de canaux.
Vue d’ensemble
Créer un BindingElement pour votre canal permet aux développeurs de l’utiliser dans une application WCF. Les objets BindingElement peuvent être utilisés dans la classe System.ServiceModel.ServiceHost pour connecter une application WCF à votre canal sans avoir les informations de type exactes de votre canal.
Une fois un BindingElement créé, vous pouvez activer des fonctionnalités supplémentaires en fonction de vos spécifications en vous conformant aux autres étapes de développement décrites dans Développement de canaux.
Ajout d'un élément de liaison
Pour implémenter un élément BindingElementpersonnalisé, écrivez une classe qui hérite de BindingElement. Par exemple, si vous avez développé un canal ChunkingChannel
capable de fragmenter de grands messages en plusieurs segments, puis de les recomposer en fin de traitement, vous pouvez utiliser ce canal sur n'importe quelle liaison en implémentant un élément BindingElement et en configurant la liaison de sorte à ce qu'elle puisse utiliser ce dernier. Un canal ChunkingChannel
est utilisé à titre d’exemple dans cette rubrique afin d’illustrer les exigences à l’implémentation d’un élément de liaison.
L'élément ChunkingBindingElement
est chargé de créer la fabrication ChunkingChannelFactory
et l'écouteur ChunkingChannelListener
. Cet élément se substitue aux implémentations CanBuildChannelFactory et CanBuildChannelListener et s'assure que le paramètre de type correspond à IDuplexSessionChannel (il s'agit de la seule forme de canal prise en charge par notre exemple de canal ChunkingChannel
) et que les autres éléments de liaison dans la liaison prennent effectivement en charge cette forme de canal.
BuildChannelFactory vérifie au préalable que la forme de canal demandée peut être construite, puis récupère une liste d'actions de message à fragmenter. 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.
Autre exemple de l’utilisation d’un canal de transport : l’exemple Transport : UDP effectue la substitution suivante.
Dans notre exemple, l'élément de liaison est UdpTransportBindingElement
, lequel 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).
Protocole d’éléments de liaison
Les nouveaux éléments de liaison peuvent remplacer ou augmenter tout élément de liaison inclus en ajoutant de nouveaux transports, encodages ou protocoles de niveau supérieur. Pour créer un nouvel élément de liaison de protocole, commencez par étendre la classe BindingElement. Vous devez ensuite au minimum implémenter BindingElement.Clone et implémenter ChannelProtectionRequirements
à l’aide de IChannel.GetProperty. Cette opération retourne ChannelProtectionRequirements pour l’élément de liaison défini. Pour plus d’informations, consultez ChannelProtectionRequirements.
Clone doit retourner une nouvelle copie de cet élément de liaison. Dans le cadre de nos meilleures pratiques, nous vous recommandons d’implémenter, en tant que créateur de cet élément de liaison, la méthode Clone à l’aide d’un constructeur de copie qui appelle le constructeur de copie de base, puis clone tous les champs supplémentaires figurant dans cette classe.
Éléments de liaison de transport
Pour créer un nouvel élément de liaison de transport, étendez l’interface TransportBindingElement. Vous devez ensuite implémenter au minimum la méthode Clone et la propriété TransportBindingElement.Scheme.
Clone doit retourner une nouvelle copie de cet élément de liaison. Dans le cadre de nos meilleures pratiques, nous vous recommandons d’implémenter, en tant que créateur de cet élément de liaison, la méthode de clonage à l’aide d’un constructeur de copie qui appelle le constructeur de copie de base, puis clone tous les champs supplémentaires figurant dans cette classe.
Scheme : la propriété Scheme retourne le modèle URI correspondant au protocole de transport représenté par l'élément de liaison. Par exemple, System.ServiceModel.Channels.HttpTransportBindingElement et System.ServiceModel.Channels.TcpTransportBindingElement retournent « http » et « net.tcp » à partir de leurs propriétés Scheme respectives.
Éléments de liaison d’encodage
Pour créer un nouvel élément de liaison d'encodage, commencez par étendre la classe BindingElement et implémenter la classe System.ServiceModel.Channels.MessageEncodingBindingElement. Vous devez ensuite implémenter au minimum les méthodes Clone, MessageEncodingBindingElement.CreateMessageEncoderFactory ainsi que la propriété MessageEncodingBindingElement.MessageVersion.
Clone. Retourne une nouvelle copie de cet élément de liaison. Dans le cadre de nos meilleures pratiques, nous vous recommandons d’implémenter, en tant que créateur de cet élément de liaison, la méthode Clone à l’aide d’un constructeur de copie qui appelle le constructeur de copie de base, puis clone tous les champs supplémentaires figurant dans 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 la version MessageVersion utilisée dans cet encodage, laquelle correspond aux versions de SOAP et WS-Addressing utilisées.
Pour une liste exhaustive des méthodes et propriétés optionnelles compatibles avec 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 définies par l’utilisateur.
Une fois l’élément de liaison de votre canal créé, consultez à nouveau la rubrique Développement de canaux pour déterminer si vous souhaitez ajouter une prise en charge du fichier de configuration à votre élément de liaison, si vous devez ajouter une prise en charge de la publication des métadonnées et comment procéder, et si vous devez construire une liaison définie par l’utilisateur qui utilise votre élément de liaison.