Instrukcje: dostosowywanie wiązania udostępnionego przez systemHow to: Customize a System-Provided Binding

Windows Communication Foundation (WCF) zawiera kilka powiązań dostarczonych przez system, które umożliwiają skonfigurowanie niektórych właściwości źródłowych elementów powiązania, ale nie wszystkich właściwości.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. W tym temacie pokazano, jak ustawić właściwości elementów powiązania w celu utworzenia niestandardowego powiązania.This topic demonstrates how to set properties on the binding elements to create a custom binding.

Aby uzyskać więcej informacji na temat bezpośredniego tworzenia i konfigurowania elementów powiązania bez użycia powiązań dostarczonych przez system, zobacz powiązania niestandardowe.For more information about how to directly create and configure binding elements without using the system-provided bindings, see Custom Bindings.

Aby uzyskać więcej informacji na temat tworzenia i rozszerzania powiązań niestandardowych, zobacz Rozszerzanie powiązań.For more information about creating and extending custom bindings, see Extending Bindings.

W programie WCF wszystkie powiązania składają się z elementów powiązania.In WCF all bindings are made up of binding elements. Każdy element powiązania pochodzi od BindingElement klasy.Each binding element derives from the BindingElement class. Powiązania dostarczone przez system, takie jak BasicHttpBinding Tworzenie i konfigurowanie własnych elementów powiązania.System-provided bindings such as BasicHttpBinding create and configure their own binding elements. W tym temacie pokazano, jak uzyskać dostęp i zmienić właściwości tych elementów powiązania, które nie są bezpośrednio uwidocznione w powiązaniu; w specjalnej BasicHttpBinding klasie.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.

Poszczególne elementy powiązania są zawarte w kolekcji reprezentowanej przez BindingElementCollection klasę i są dodawane w następującej kolejności: przepływ transakcji, niezawodne sesje, zabezpieczenia, złożone dupleks, jednokierunkowe, zabezpieczenia strumieniowe, kodowanie komunikatów i 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. Należy zauważyć, że nie wszystkie elementy powiązania wymienione w każdym powiązaniu są wymagane.Note that not all the binding elements listed are required in every binding. Elementy powiązań zdefiniowane przez użytkownika mogą być również wyświetlane w tej kolekcji elementów powiązania i muszą występować w takiej samej kolejności jak wcześniej.User-defined binding elements can also appear in this binding element collection and must appear in the same order as previously described. Na przykład transport zdefiniowany przez użytkownika musi być ostatnim elementem kolekcji elementów powiązania.For example, a user-defined transport must be the last element of the binding element collection.

BasicHttpBindingKlasa zawiera trzy elementy powiązania:The BasicHttpBinding class contains three binding elements:

  1. Opcjonalny element powiązania zabezpieczeń, AsymmetricSecurityBindingElement Klasa używana z transportem http (zabezpieczenia na poziomie komunikatów) lub TransportSecurityBindingElement Klasa, która jest używana, gdy warstwa transportu zapewnia zabezpieczenia, w tym przypadku jest używany transport https.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. Wymagany element powiązania kodera komunikatu ( TextMessageEncodingBindingElement lub) MtomMessageEncodingBindingElement .A required message encoder binding element, either TextMessageEncodingBindingElement or MtomMessageEncodingBindingElement.

  3. Wymagany element powiązania transportu, albo HttpTransportBindingElement lub HttpsTransportBindingElement .A required transport binding element, either HttpTransportBindingElement, or HttpsTransportBindingElement.

W tym przykładzie utworzysz wystąpienie powiązania, wygeneruj niestandardowe powiązanie z niego, Przeanalizuj elementy powiązania w niestandardowym powiązaniu i po znalezieniu elementu powiązania HTTP ustawimy jego KeepAliveEnabled Właściwość na false .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. KeepAliveEnabledWłaściwość nie jest uwidaczniana bezpośrednio w BasicHttpBinding , dlatego należy utworzyć niestandardowe powiązanie, aby przejść do elementu Binding i ustawić tę właściwość.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.

Aby zmodyfikować powiązanie dostarczone przez systemTo modify a system-provided binding

  1. Utwórz wystąpienie BasicHttpBinding klasy i ustaw jego tryb zabezpieczeń na poziom komunikatów.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. Utwórz powiązanie niestandardowe na podstawie powiązania i Utwórz BindingElementCollection klasę z jednego z właściwości niestandardowego powiązania.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. Pętla przez BindingElementCollection klasę i po znalezieniu HttpTransportBindingElement klasy, ustaw jej KeepAliveEnabled Właściwość na 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
    

Zobacz teżSee also