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:
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.
Een vereist bindingselement voor berichtcodering, ofwel TextMessageEncodingBindingElementMtomMessageEncodingBindingElement.
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 BasicHttpBinding
eigenschap 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
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
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
Loop door de BindingElementCollection klasse en stel KeepAliveEnabled de eigenschap
false
ervan 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