Vorgehensweise: Anpassen einer vom System bereitgestellten BindungHow to: Customize a System-Provided Binding

Windows Communication Foundation (WCF) enthält mehrere vom System bereitgestellte Bindungen, mit die Sie einige der Eigenschaften von zugrundeliegenden Bindungselementen, aber nicht alle Eigenschaften konfigurieren können.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. In diesem Thema wird veranschaulicht, wie Sie Eigenschaften für die Bindungselemente festlegen, um eine benutzerdefinierte Bindung zu erstellen.This topic demonstrates how to set properties on the binding elements to create a custom binding.

Weitere Informationen dazu, wie direkt erstellen und Konfigurieren von Bindungen ohne Verwendung der vom System bereitgestellte Bindungen finden Sie unter benutzerdefinierte Bindungen.For more information about how to directly create and configure binding elements without using the system-provided bindings, see Custom Bindings.

Weitere Informationen zum Erstellen und Erweitern von benutzerdefinierten Bindungen finden Sie unter Erweitern von Bindungen.For more information about creating and extending custom bindings, see Extending Bindings.

In WCF Alle Bindungen bestehen aus Bindungselementen.In WCF all bindings are made up of binding elements. Jedes Bindungselement wird von der BindingElement-Klasse abgeleitet.Each binding element derives from the BindingElement class. Systemseitig bereitgestellte Bindungen wie BasicHttpBinding erstellen und konfigurieren ihre eigenen Bindungselemente.System-provided bindings such as BasicHttpBinding create and configure their own binding elements. In diesem Thema wird gezeigt, wie Sie auf die Eigenschaften dieser Bindungselemente zugreifen und sie ändern können. Die Elemente sind nicht direkt über die Bindung verfügbar. Dies trifft insbesondere auf die BasicHttpBinding-Klasse zu.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.

Die einzelnen Bindungselemente sind in einer Auflistung, die von der BindingElementCollection-Klasse dargestellt wird, enthalten, und werden in dieser Reihenfolge hinzugefügt: Transaktionsfluss, zuverlässige Sitzung, Sicherheit, Composite Duplex, Eindirektional, Streamsicherheit, Nachrichtencodierung und 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. Beachten Sie, dass nicht alle aufgelisteten Bindungselemente in jeder Bindung erforderlich sind.Note that not all the binding elements listed are required in every binding. Auch benutzerdefinierte Bindungselemente können in dieser Auflistung enthalten sein und müssen in der gerade beschriebenen Reihenfolge angezeigt werden.User-defined binding elements can also appear in this binding element collection and must appear in the same order as previously described. Zum Beispiel muss ein benutzerdefinierter Transport das letzte Element der Bindungselementeauflistung sein.For example, a user-defined transport must be the last element of the binding element collection.

Die BasicHttpBinding-Klasse enthält drei Bindungselemente:The BasicHttpBinding class contains three binding elements:

  1. Ein optionales Sicherheitsbindungselement, entweder die beim HTTP-Transport verwendete AsymmetricSecurityBindingElement-Klasse (Sicherheit auf Nachrichtenebene) oder die TransportSecurityBindingElement-Klasse, die verwendet wird, wenn die Transportschicht für die Sicherheit sorgt. In diesem Fall wird der HTTPS-Transport verwendet.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. Ein erforderliches Bindungselement zur Nachrichtencodierung, entweder TextMessageEncodingBindingElement oder MtomMessageEncodingBindingElement.A required message encoder binding element, either TextMessageEncodingBindingElement or MtomMessageEncodingBindingElement.

  3. Ein erforderliches Transportbindungselement, entweder HttpTransportBindingElement oder HttpsTransportBindingElement.A required transport binding element, either HttpTransportBindingElement, or HttpsTransportBindingElement.

Wir in diesem Beispiel erstellen Sie eine Instanz der Bindung, generieren eine benutzerdefinierte Bindung aus, die Bindungselemente der benutzerdefinierten Bindung untersucht und wenn das HTTP-Bindungselement gefunden wird, legen wir die KeepAliveEnabled Eigenschaft 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. Die KeepAliveEnabled-Eigenschaft steht nicht direkt über die BasicHttpBinding zur Verfügung, sodass eine benutzerdefinierte Bindung erstellt werden muss, um zum Bindungselement zu navigieren und dessen Eigenschaft festzulegen.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.

So ändern Sie eine vom System bereitgestellte BindungTo modify a system-provided binding

  1. Erstellen Sie eine Instanz der BasicHttpBinding-Klasse und legen Sie ihren Sicherheitsmodus auf die Nachrichtenebene fest.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. Erstellen Sie eine benutzerdefinierte Bindung aus dieser Bindung, und erstellen Sie eine BindingElementCollection-Klasse aus einer der Eigenschaften der benutzerdefinierten Bindung.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. Durchlaufen Sie die BindingElementCollection-Klasse, und wenn Sie die HttpTransportBindingElement-Klasse gefunden haben, legen Sie deren KeepAliveEnabled-Eigenschaft auf false fest.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
    

Siehe auchSee Also

HttpTransportBindingElement
BasicHttpBinding
CustomBinding
Benutzerdefinierte BindungenCustom Bindings