Dela via


Gör så här: Anpassa en bindning som tillhandahålls av systemet

Windows Communication Foundation (WCF) innehåller flera systembaserade bindningar som gör att du kan konfigurera några av egenskaperna för de underliggande bindningselementen, men inte alla egenskaper. Det här avsnittet visar hur du anger egenskaper för bindningselementen för att skapa en anpassad bindning.

Mer information om hur du skapar och konfigurerar bindningselement direkt utan att använda de systembaserade bindningarna finns i Anpassade bindningar.

Mer information om hur du skapar och utökar anpassade bindningar finns i Utöka bindningar.

I WCF består alla bindningar av bindningselement. Varje bindningselement härleds från BindingElement klassen. Bindningar som tillhandahålls av systemet, till exempel BasicHttpBinding skapa och konfigurera egna bindningselement. Det här avsnittet visar hur du kommer åt och ändrar egenskaperna för dessa bindningselement, som inte är direkt exponerade för bindningen. BasicHttpBinding specifikt klassen.

De enskilda bindningselementen finns i en samling som representeras av BindingElementCollection klassen och läggs till i följande ordning: Transaktionsflöde, Tillförlitlig session, säkerhet, sammansatt duplex, enkelriktad, Stream Security, Meddelandekodning och Transport. Observera att inte alla bindningselement som anges krävs i varje bindning. Användardefinierade bindningselement kan också visas i den här bindningselementsamlingen och måste visas i samma ordning som tidigare beskrivits. En användardefinierad transport måste till exempel vara det sista elementet i bindningselementsamlingen.

Klassen BasicHttpBinding innehåller tre bindningselement:

  1. Ett valfritt säkerhetsbindningselement, antingen den AsymmetricSecurityBindingElement klass som används med HTTP-transporten (säkerhet på meddelandenivå) eller TransportSecurityBindingElement klassen, som används när transportlagret ger säkerhet, i vilket fall HTTPS-transporten används.

  2. Ett obligatoriskt meddelandekodarbindningselement, antingen TextMessageEncodingBindingElement eller MtomMessageEncodingBindingElement.

  3. Ett obligatoriskt transportbindningselement, antingen HttpTransportBindingElement, eller HttpsTransportBindingElement.

I det här exemplet skapar vi en instans av bindningen, genererar en anpassad bindning från den, undersöker bindningselementen i den anpassade bindningen och när vi hittar HTTP-bindningselementet anger vi dess KeepAliveEnabled egenskap till false. Egenskapen KeepAliveEnabled exponeras inte direkt på BasicHttpBinding, så vi måste skapa en anpassad bindning för att navigera ned till bindningselementet och ange den här egenskapen.

Så här ändrar du en bindning som tillhandahålls av systemet

  1. Skapa en instans av BasicHttpBinding klassen och ange dess säkerhetsläge till meddelandenivå.

    //  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. Skapa en anpassad bindning från bindningen och skapa en BindingElementCollection klass från en av den anpassade bindningens egenskaper.

    //  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. Loopa BindingElementCollection igenom klassen och när du hittar HttpTransportBindingElement klassen anger du dess KeepAliveEnabled egenskap till 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
    

Se även