Procédure : créer une liaison personnalisée à l’aide de SecurityBindingElementHow to: Create a Custom Binding Using the SecurityBindingElement

Windows Communication Foundation (WCF) comprend plusieurs liaisons fournies par le système qui peuvent être configurées, mais n’offrent pas une flexibilité totale lors de la configuration de toutes les options de sécurité prises en charge par WCF.Windows Communication Foundation (WCF) includes several system-provided bindings that can be configured but do not provide full flexibility when configuring all the security options that WCF supports. Cette rubrique montre comment créer une liaison personnalisée directement à partir d'éléments de liaison individuels et met en évidence certains des paramètres de sécurité qui peuvent être spécifiés lors de la création d'une liaison de ce type.This topic demonstrates how to create a custom binding directly from individual binding elements and highlights some of the security settings that can be specified when creating such a binding. Pour plus d’informations sur la création de liaisons personnalisées, consultez extension des liaisons.For more information about creating custom bindings, see Extending Bindings.

Avertissement

SecurityBindingElement ne prend pas en charge la forme de canal IDuplexSessionChannel, qui est la forme de canal par défaut utilisée par le transport TCP lorsque TransferMode a la valeur Buffered.SecurityBindingElement does not support the IDuplexSessionChannel channel shape, which is the default channel shape use by the TCP transport when TransferMode is set to Buffered. Vous devez définir TransferMode à Streamed pour utiliser SecurityBindingElement dans ce scénario.You must set TransferMode to Streamed in order to use SecurityBindingElement in this scenario.

Création d’une liaison personnaliséeCreating a Custom Binding

Dans WCF, toutes les liaisons sont composées d' éléments de liaison.In WCF all bindings are made up of binding elements. Chaque élément de liaison dérive de la classe BindingElement.Each binding element derives from the BindingElement class. Pour les liaisons fournies par le système standard, les éléments de liaison sont créés et configurés automatiquement, bien que vous puissiez personnaliser quelques paramètres de propriétés.For the standard system-provided bindings, the binding elements are created and configured for you, although you can customize some of the property settings.

En revanche, pour créer une liaison personnalisée, les éléments de liaison sont créés et configurés, puis une CustomBinding est créée à partir des éléments de liaison.In contrast, to create a custom binding, binding elements are created and configured and a CustomBinding is created from the binding elements.

Pour ce faire, vous ajoutez les éléments de liaison individuels à une collection représentée par une instance de la classe BindingElementCollection, puis vous affectez à la propriété Elements de CustomBinding une valeur égale à cet objet.To do this, you add the individual binding elements to a collection represented by an instance of the BindingElementCollection class, and then set the Elements property of the CustomBinding equal to that object. Vous devez ajouter les éléments de liaison dans l’ordre suivant: Flux de transaction, session fiable, sécurité, duplex composite, unidirectionnel, sécurité de flux, encodage de message et transport.You must add the binding elements in the following order: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding, and Transport. Notez que les éléments de liaison répertoriés ne sont pas tous requis dans chaque liaison.Note that not all the binding elements listed are required in every binding.

SecurityBindingElementSecurityBindingElement

Trois éléments de liaison concernent la sécurité au niveau des messages et tous sont dérivés de la classe SecurityBindingElement.Three binding elements relate to message level security, all of which derive from the SecurityBindingElement class. Il s'agit de TransportSecurityBindingElement, SymmetricSecurityBindingElement et AsymmetricSecurityBindingElement.The three are TransportSecurityBindingElement, SymmetricSecurityBindingElement, and AsymmetricSecurityBindingElement. Le TransportSecurityBindingElement est utilisé pour assurer une sécurité en mode mixte.The TransportSecurityBindingElement is used to provide Mixed mode security. Les deux autres éléments sont utilisés lorsque la couche message fournit la sécurité.The other two elements are used when the message layer provides security.

D'autres classes sont utilisées lorsque la sécurité au niveau du transport est assurée :Additional classes are used when transport level security is provided:

Éléments de liaison requisRequired Binding Elements

Un grand nombre d’éléments de liaison peuvent être combinés dans une liaison.There are a large number of possible binding elements that can be combined into a binding. Toutes les combinaisons ne sont pas valides.Not all of these combinations are valid. Cette section décrit les éléments requis qui doivent être présents dans une liaison de sécurité.This section describes the required elements that must be present in a security binding.

Les liaisons de sécurité valides dépendent de nombreux facteurs, notamment :Valid security bindings depend on many factors, including the following:

  • Mode de sécuritéSecurity mode.

  • Protocole de transportTransport protocol.

  • Modèle d’échange de messages (MEP) spécifié dans le contratThe message exchange pattern (MEP) specified in the contract.

Le tableau suivant indique les configurations des piles d’éléments de liaison valides pour chaque combinaison des facteurs précédents.The following table shows the valid binding element stack configurations for each combination of the preceding factors. Notez qu’il s’agit d’exigences minimales.Note that these are minimal requirements. Vous pouvez ajouter d'autres éléments de liaison à la liaison, notamment des éléments de liaison d'encodage de message et de transaction.You can add additional binding elements to the binding, such as message encoding binding elements, transaction binding elements, and other binding elements.

Mode de sécuritéSecurity Mode TransportTransport Contracter le modèle d'échange de messagesContract Message Exchange Pattern Contracter le modèle d'échange de messagesContract Message Exchange Pattern Contracter le modèle d'échange de messagesContract Message Exchange Pattern
Datagram Request Reply Duplex
TransportTransport HttpsHttps
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP
OneWayBindingElementOneWayBindingElement
StreamSecurityBindingElement de SSL ou WindowsSSL or Windows StreamSecurityBindingElement StreamSecurityBindingElement de SSL ou WindowsSSL or Windows StreamSecurityBindingElement StreamSecurityBindingElement de SSL ou WindowsSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
MessageMessage HttpHttp SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
CompositeDuplexBindingElementCompositeDuplexBindingElement
OneWayBindingElementOneWayBindingElement OneWayBindingElementOneWayBindingElement
HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement
TcpTcp SecurityBindingElementSecurityBindingElement SecurityBindingElementSecurityBindingElement SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
Mixte (transport avec informations d'identification de message)Mixed (transport with message credentials) HttpsHttps TransportSecurityBindingElementTransportSecurityBindingElement TransportSecurityBindingElementTransportSecurityBindingElement
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP TransportSecurityBindingElementTransportSecurityBindingElement SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation) SymmetricSecurityBindingElement (mode d'authentification = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
OneWayBindingElementOneWayBindingElement
StreamSecurityBindingElement de SSL ou WindowsSSL or Windows StreamSecurityBindingElement StreamSecurityBindingElement de SSL ou WindowsSSL or Windows StreamSecurityBindingElement StreamSecurityBindingElement de SSL ou WindowsSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement

Notez qu'il existe de nombreux paramètres configurables sur SecurityBindingElements.Note that there are many configurable settings on the SecurityBindingElements. Pour plus d’informations, consultez modes d’authentification SecurityBindingElement.For more information, see SecurityBindingElement Authentication Modes.

Pour plus d’informations, consultez conversations sécurisées et sessions sécurisées.For more information, see Secure Conversations and Secure Sessions.

ProcéduresProcedures

Pour créer une liaison personnalisée qui utilise SymmetricSecurityBindingElementTo create a custom binding that uses a SymmetricSecurityBindingElement

  1. Créez une instance de la classe BindingElementCollection portant le nom outputBec.Create an instance of the BindingElementCollection class with the name outputBec.

  2. Appelez la méthode statique M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), qui retourne une instance de la classe SymmetricSecurityBindingElement.Call the static method M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), which returns an instance of the SymmetricSecurityBindingElement class.

  3. Ajoutez SymmetricSecurityBindingElement à la collection (outputBec) en appelant la méthode Add de Collection<T> de la classe BindingElement.Add the SymmetricSecurityBindingElement to the collection (outputBec) by calling the Add method of the Collection<T> of BindingElement class.

  4. Créez une instance de la classe TextMessageEncodingBindingElement et ajoutez-la à la collection (outputBec).Create an instance of the TextMessageEncodingBindingElement class and add it to the collection (outputBec). Cela spécifie l’encodage utilisé par la liaison.This specifies the encoding used by the binding.

  5. Créez un HttpTransportBindingElement et ajoutez-le à la collection outputBec.Create a HttpTransportBindingElement and add it to the collection (outputBec). Cela indique que la liaison utilise le transport HTTP.This specifies that the binding uses the HTTP transport.

  6. Créez une liaison personnalisée en créant une instance de la classe CustomBinding et en passant la collection outputBec au constructeur.Create a new custom binding by creating an instance of the CustomBinding class and passing the collection outputBec to the constructor.

  7. La liaison personnalisée résultante partage un grand nombre des caractéristiques de WSHttpBinding.The resulting custom binding shares many of the same characteristics as the standard WSHttpBinding. Elle spécifie la sécurité au niveau du message et les informations d'identification Windows, mais désactive les sessions sécurisées, requiert que les informations d'identification du service soient spécifiées hors bande, et ne chiffre pas de signature.It specifies message-level security and Windows credentials but disables secure sessions, requires that the service credential be specified out-of-band, and does not encrypt signatures. La dernière ne peut être contrôlée que par la définition de la propriété MessageProtectionOrder, tel qu'indiqué à l'étape 4.The last can be controlled only by setting the MessageProtectionOrder property as shown in step 4. Les deux autres peuvent être contrôlées à l'aide de paramètres sur la liaison standard.The other two can be controlled using settings on the standard binding.

ExempleExample

DescriptionDescription

L'exemple suivant fournit une fonction complète permettant de créer une liaison personnalisée qui utilise SymmetricSecurityBindingElement.The following example provides a complete function to create a custom binding that uses a SymmetricSecurityBindingElement.

CodeCode

// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
    SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
Public Shared Function CreateCustomBinding() As Binding
    ' Create an empty Custom Binding to populate, 
    Dim binding As New CustomBinding()
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As SymmetricSecurityBindingElement
    ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    binding.Elements.Add(ssbe)
    binding.Elements.Add(New TextMessageEncodingBindingElement())
    binding.Elements.Add(New HttpTransportBindingElement())
    Return New CustomBinding(binding)

End Function

Voir aussiSee also