Procédure : personnaliser une liaison fournie par le systèmeHow to: Customize a System-Provided Binding

Windows Communication Foundation (WCF) comprend plusieurs liaisons fournies par le système qui vous permettent de configurer certaines des propriétés des éléments de liaison sous-jacents, mais pas toutes les propriétés.Windows Communication Foundation (WCF) includes several system-provided bindings that allow you to configure some of the properties of the underlying binding elements, but not all of the properties. Cette rubrique explique comment attribuer des propriétés aux éléments de liaison afin de créer une liaison personnalisée.This topic demonstrates how to set properties on the binding elements to create a custom binding.

Pour plus d’informations sur la façon de créer et de configurer directement des éléments de liaison sans utiliser les liaisons fournies par le système, consultez liaisons personnalisées.For more information about how to directly create and configure binding elements without using the system-provided bindings, see Custom Bindings.

Pour plus d’informations sur la création et l’extension de liaisons personnalisées, consultez extension des liaisons.For more information about creating and extending custom bindings, see Extending Bindings.

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. Les liaisons fournies par le système telles que BasicHttpBinding créent et configurent leurs propres éléments de liaison.System-provided bindings such as BasicHttpBinding create and configure their own binding elements. Cette rubrique vous indique comment accéder aux propriétés de ces éléments de liaison qui ne sont pas exposés directement sur la liaison et comment les modifier ; il s’agit, notamment, de la classe BasicHttpBinding.This topic shows you how to access and change the properties of these binding elements, which are not directly exposed on the binding; specifically, the BasicHttpBinding class.

Les éléments de liaison individuels sont contenus dans une collection représentée par BindingElementCollection la classe et sont ajoutés dans cet ordre : Flux de transaction, session fiable, sécurité, duplex composite, unidirectionnel, sécurité de flux, encodage de message et transport.The individual binding elements are contained in a collection represented by the BindingElementCollection class and are added in this 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. Les éléments de liaison définis par l’utilisateur peuvent également apparaître dans cette collection et doivent figurer dans le même ordre que précédemment.User-defined binding elements can also appear in this binding element collection and must appear in the same order as previously described. Par exemple, un transport défini par l'utilisateur doit être le dernier élément de la collection d'éléments de liaison.For example, a user-defined transport must be the last element of the binding element collection.

La classe BasicHttpBinding contient trois éléments de liaison :The BasicHttpBinding class contains three binding elements:

  1. Un élément de liaison de sécurité facultatif, soit la classe AsymmetricSecurityBindingElement utilisée avec le transport HTTP (sécurité de niveau transport), soit la classe TransportSecurityBindingElement utilisée lorsque la couche transport fournit la sécurité, auquel cas le transport HTTPS est utilisé.An optional security binding element, either the AsymmetricSecurityBindingElement class used with the HTTP transport (message level security) or the TransportSecurityBindingElement class, which is used when the transport layer provides security, in which case the HTTPS transport is used.

  2. Un élément de liaison d'encodeur de message requis, TextMessageEncodingBindingElement ou MtomMessageEncodingBindingElement.A required message encoder binding element, either TextMessageEncodingBindingElement or MtomMessageEncodingBindingElement.

  3. Un élément de liaison de transport requis, HttpTransportBindingElement, ou HttpsTransportBindingElement.A required transport binding element, either HttpTransportBindingElement, or HttpsTransportBindingElement.

Dans cet exemple, nous créons une instance de la liaison, générons une liaison personnalisée à partir de celle-ci, nous examinons les éléments de liaison dans la liaison personnalisée et, lorsque nous KeepAliveEnabled trouvons l' falseélément de liaison http, nous définissons sa propriété sur.In this example we create an instance of the binding, generate a custom binding from it, examine the binding elements in the custom binding, and when we find the HTTP binding element, we set its KeepAliveEnabled property to false. La propriété KeepAliveEnabled n’est pas exposée directement sur BasicHttpBinding, nous devons donc créer une liaison personnalisée pour naviguer jusqu’à l’élément de liaison et définir cette propriété.The KeepAliveEnabled property is not exposed directly on the BasicHttpBinding, so we must create a custom binding to navigate down to the binding element and set this property.

Pour modifier une liaison fournie par le systèmeTo modify a system-provided binding

  1. Créez une instance de la classe BasicHttpBinding et affectez à son mode de sécurité la valeur de sécurité au niveau du message.Create an instance of the BasicHttpBinding class and set its security mode to message-level.

    //  Create an instance of the T:System.ServiceModel.BasicHttpBinding 
    //  class and set its security mode to message-level security.
    BasicHttpBinding binding = new BasicHttpBinding();
    binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate;
    binding.Security.Mode = BasicHttpSecurityMode.Message;
    
    '  Create an instance of the T:System.ServiceModel.BasicHttpBinding 
    '  class and set its security mode to message-level security.
    Dim binding As New BasicHttpBinding()
    With binding.Security
        .Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate
        .Mode = BasicHttpSecurityMode.Message
    End With
    
  2. Créez une liaison personnalisée à partir de la liaison et ensuite une classe BindingElementCollection à partir de l’une des propriétés de la liaison personnalisée.Create a custom binding from the binding and create a BindingElementCollection class from one of the custom binding's properties.

    //  Create a custom binding from the binding 
    CustomBinding cb = new CustomBinding(binding);
    //  Get the BindingElementCollection from this custom binding 
    BindingElementCollection bec = cb.Elements();
    
    '  Create a custom binding from the binding 
    Dim cb As New CustomBinding(binding)
    '  Get the BindingElementCollection from this custom binding 
    Dim bec = cb.Elements
    
  3. Parcourez la classe BindingElementCollection et lorsque vous trouverez la classe HttpTransportBindingElement, affectez à sa propriété KeepAliveEnabled la valeur false.Loop through the BindingElementCollection class, and when you find the HttpTransportBindingElement class, set its KeepAliveEnabled property to false.

    //  Loop through the collection, and when you find the HTTP binding element
    //  set its KeepAliveEnabled property to false
    foreach (BindingElement be in bec)
    {
        Type thisType = be.GetType();
        Console.WriteLine(thisType);
        if (be is HttpTransportBindingElement)
        {
            HttpTransportBindingElement httpElement = (HttpTransportBindingElement)be;
            Console.WriteLine("\tBefore: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled);
            httpElement.KeepAliveEnabled = false;
            Console.WriteLine("\tAfter:  HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled);
        }
    }
    
    '  Loop through the collection, and when you find the HTTP binding element
    '  set its KeepAliveEnabled property to false
    For Each be In bec
        Dim thisType = be.GetType()
        Console.WriteLine(thisType)
        If TypeOf be Is HttpTransportBindingElement Then
            Dim httpElement As HttpTransportBindingElement = CType(be, HttpTransportBindingElement)
            Console.WriteLine(Constants.vbTab & "Before: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled)
            httpElement.KeepAliveEnabled = False
            Console.WriteLine(vbTab & "After:  HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled)
        End If
    Next be
    

Voir aussiSee also