Delen via


Procedure: Een door het systeem geleverde binding aanpassen

Windows Communication Foundation (WCF) bevat verschillende door het systeem geleverde bindingen waarmee u enkele eigenschappen van de onderliggende bindingselementen kunt configureren, maar niet alle eigenschappen. In dit onderwerp ziet u hoe u eigenschappen instelt voor de bindingselementen om een aangepaste binding te maken.

Zie Aangepaste bindingen voor meer informatie over het rechtstreeks maken en configureren van bindingselementen zonder gebruik te maken van de door het systeem geleverde bindingen.

Zie Uitbreidingsbindingen voor meer informatie over het maken en uitbreiden van aangepaste bindingen.

In WCF bestaan alle bindingen uit bindingselementen. Elk bindingselement is afgeleid van de BindingElement klasse. Door het systeem geleverde bindingen, zoals BasicHttpBinding het maken en configureren van hun eigen bindingselementen. In dit onderwerp wordt beschreven hoe u de eigenschappen van deze bindingselementen kunt openen en wijzigen, die niet rechtstreeks beschikbaar zijn voor de binding; met name de BasicHttpBinding klasse.

De afzonderlijke bindingselementen zijn opgenomen in een verzameling die wordt vertegenwoordigd door de BindingElementCollection klasse en worden toegevoegd in deze volgorde: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding en Transport. Houd er rekening mee dat niet alle vermelde bindingselementen vereist zijn in elke binding. Door de gebruiker gedefinieerde bindingselementen kunnen ook worden weergegeven in deze verzameling bindingselementen en moeten in dezelfde volgorde worden weergegeven als eerder beschreven. Een door de gebruiker gedefinieerd transport moet bijvoorbeeld het laatste element van de verzameling bindingselementen zijn.

De BasicHttpBinding klasse bevat drie bindingselementen:

  1. Een optioneel beveiligingsbindingselement, ofwel de AsymmetricSecurityBindingElement klasse die wordt gebruikt met het HTTP-transport (beveiliging op berichtniveau) of de TransportSecurityBindingElement klasse, die wordt gebruikt wanneer de transportlaag beveiliging biedt, in welk geval het HTTPS-transport wordt gebruikt.

  2. Een vereist bindingselement voor berichtcodering, ofwel TextMessageEncodingBindingElementMtomMessageEncodingBindingElement.

  3. Een vereist transportbindingselement, ofwel HttpTransportBindingElement, of HttpsTransportBindingElement.

In dit voorbeeld maken we een exemplaar van de binding, genereren we er een aangepaste binding van, onderzoeken we de bindingselementen in de aangepaste binding en wanneer we het HTTP-bindingselement vinden, stellen we de eigenschap ervan KeepAliveEnabled in op false. De KeepAliveEnabled eigenschap wordt niet rechtstreeks op de BasicHttpBindingeigenschap weergegeven, dus we moeten een aangepaste binding maken om omlaag te gaan naar het bindingselement en deze eigenschap in te stellen.

Een door het systeem geleverde binding wijzigen

  1. Maak een exemplaar van de klasse en stel de BasicHttpBinding beveiligingsmodus in op berichtniveau.

    //  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. Maak een aangepaste binding op basis van de binding en maak een klasse op basis van een BindingElementCollection van de eigenschappen van de aangepaste binding.

    //  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. Loop door de BindingElementCollection klasse en stel KeepAliveEnabled de eigenschap falseervan in op wanneer u de HttpTransportBindingElement klasse vindt.

    //  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
    

Zie ook