Delen via


Hoe te: Een System-Provided-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 bindingenvoor meer informatie over het rechtstreeks maken en configureren van bindingen zonder gebruik te maken van de door het systeem geleverde bindingen.

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

In WCF bestaan alle bindingen uit bindingselementen. Elk bindingselement is afgeleid van de klasse BindingElement. Door het systeem geleverde bindingen, zoals BasicHttpBinding, maken en configureren 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 bevinden zich 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 klasse BasicHttpBinding bevat drie bindingselementen:

  1. Een optioneel beveiligingsbindingselement, ofwel de AsymmetricSecurityBindingElement klasse die wordt gebruikt met het HTTP-transport (berichtniveaubeveiliging) 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, TextMessageEncodingBindingElement of MtomMessageEncodingBindingElement.

  3. Een vereist transportbindingselement, ofwel HttpTransportBindingElementof HttpsTransportBindingElement.

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

Een door het systeem geleverde binding wijzigen

  1. Maak een exemplaar van de BasicHttpBinding-klasse en stel de 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 BindingElementCollection-klasse op basis van een 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 wanneer u de HttpTransportBindingElement klasse vindt, stelt u de eigenschap KeepAliveEnabled ervan in op 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 = {httpElement.KeepAliveEnabled}");
            httpElement.KeepAliveEnabled = false;
            Console.WriteLine($"\tAfter:  HttpTransportBindingElement.KeepAliveEnabled = {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