Как настроить привязку, предоставляемую системой
Windows Communication Foundation (WCF) содержит несколько привязок, предоставляемых системой, которые позволяют настраивать некоторые свойства базовых элементов привязки, но не все свойства. В данном разделе показано, как задать свойства в элементах привязки, чтобы создать пользовательскую привязку.
Дополнительные сведения непосредственном создании и настройке элементов привязки без использования привязок, предоставляемых системой, см. в разделе Пользовательские привязки.
Дополнительные сведения создании и расширении пользовательских привязок см. в разделе Расширение привязок.
В WCF все привязки состоят из элементов привязки. Каждый элемент привязки наследуется от класса BindingElement. Привязки, предоставляемые системой, такие как BasicHttpBinding, создают и настраивают собственные элементы привязки. В данном разделе показано, как получить доступ и изменить свойства этих элементов привязки, которые не предоставляются непосредственно в привязке, в частности, класс BasicHttpBinding.
Отдельные элементы привязки содержатся в коллекции, представленной классом BindingElementCollection, и добавляются в следующем порядке: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding и Transport. Обратите внимание, что все перечисленные элементы привязки являются обязательными для каждой привязки. Пользовательские элементы привязки также могут отображаться в коллекции элементов привязки и должны отображаться в указанном выше порядке. Например, пользовательский транспорт должен быть последним элементом в коллекции элементов привязки.
Класс BasicHttpBinding содержит три элемента привязки.
Необязательный элемент привязки безопасности: класс AsymmetricSecurityBindingElement, используемый с транспортом HTTP (безопасность на уровне сообщений), или класс TransportSecurityBindingElement, используемый при предоставлении безопасности на уровне транспорта, при этом используется транспорт HTTPS.
Обязательный элемент привязки кодировщика сообщений: элемент TextMessageEncodingBindingElement или элемент MtomMessageEncodingBindingElement.
Обязательный элемент привязки транспорта: элемент HttpTransportBindingElement или элемент HttpsTransportBindingElement.
В этом примере создается экземпляр привязки, из него создается пользовательская привязка, проверяются элементы привязки в пользовательской привязке и при обнаружении элемента привязки HTTP свойству KeepAliveEnabled
присваивается значение false
. Свойство KeepAliveEnabled
не представлено напрямую в привязке BasicHttpBinding
, поэтому необходимо создать пользовательскую привязку, чтобы перейти вниз к элементу привязки и присвоить этому свойству значение.
Изменение привязки, предоставляемой системой
Создайте экземпляр класса BasicHttpBinding и установите для него режим безопасности на уровне сообщений.
' 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
Создайте пользовательскую привязку из привязки и создайте класс BindingElementCollection из одного из свойств пользовательской привязки.
' Create a custom binding from the binding Dim cb As New CustomBinding(binding) ' Get the BindingElementCollection from this custom binding Dim bec = cb.Elements
Выполните цикл по классу BindingElementCollection и при нахождении класса HttpTransportBindingElement присвойте его свойству KeepAliveEnabled значение false.
' 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
См. также
Справочник
HttpTransportBindingElement
BasicHttpBinding
CustomBinding