Vorgehensweise: Anpassen einer vom System bereitgestellten Bindung
Windows Communication Foundation (WCF) umfasst mehrere systemseitig bereitgestellte Bindungen, bei denen Sie einige der Eigenschaften von zugrundeliegenden Bindungselementen konfigurieren können. Es lassen sich jedoch nicht alle Eigenschaften konfigurieren. In diesem Thema wird veranschaulicht, wie Sie Eigenschaften für die Bindungselemente festlegen, um eine benutzerdefinierte Bindung zu erstellen.
Weitere Informationen über zur direkten Erstellung und Konfiguration von Bindungselementen, ohne die systemseitig bereitgestellten Bindungen zu verwenden, finden Sie unter Benutzerdefinierte Bindungen.
Weitere Informationen über zur Erstellung und Erweiterung benutzerdefinierter Bindungen finden Sie unter Erweitern von Bindungen.
In WCF bestehen alle Bindungen aus Bindungselementen. Jedes Bindungselement wird von der BindingElement-Klasse abgeleitet. Systemseitig bereitgestellte Bindungen wie BasicHttpBinding erstellen und konfigurieren ihre eigenen Bindungselemente. 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.
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. Beachten Sie, dass nicht alle aufgelisteten Bindungselemente in jeder Bindung erforderlich sind. Auch benutzerdefinierte Bindungselemente können in dieser Auflistung enthalten sein und müssen in der gerade beschriebenen Reihenfolge angezeigt werden. Zum Beispiel muss ein benutzerdefinierter Transport das letzte Element der Bindungselementeauflistung sein.
Die BasicHttpBinding-Klasse enthält drei Bindungselemente:
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.
Ein erforderliches Bindungselement zur Nachrichtencodierung, entweder TextMessageEncodingBindingElement oder MtomMessageEncodingBindingElement.
Ein erforderliches Transportbindungselement, entweder HttpTransportBindingElement oder HttpsTransportBindingElement.
In diesem Beispiel werden eine Instanz der Bindung erstellt, eine benutzerdefinierte Bindung aus dieser Instanz erstellt, die Bindungselemente der benutzerdefinierten Bindung untersucht und wenn das HTTP-Bindungselement gefunden wird, wird dessen KeepAliveEnabled
-Eigenschaft auf false
festgelegt. 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.
So ändern Sie eine vom System bereitgestellte Bindung
Erstellen Sie eine Instanz der BasicHttpBinding-Klasse und legen Sie ihren Sicherheitsmodus auf die Nachrichtenebene fest.
' 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
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 Dim cb As New CustomBinding(binding) ' Get the BindingElementCollection from this custom binding Dim bec = cb.Elements
Durchlaufen Sie die BindingElementCollection-Klasse, und wenn Sie die HttpTransportBindingElement-Klasse gefunden haben, legen Sie deren KeepAliveEnabled-Eigenschaft auf false fest.
' 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 auch
Verweis
HttpTransportBindingElement
BasicHttpBinding
CustomBinding