Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Windows Communication Foundation (WCF) включает несколько системных привязок, которые позволяют настроить некоторые свойства базовых элементов привязки, но не все свойства. В этом разделе показано, как задать свойства элементов привязки для создания пользовательской привязки.
Дополнительные сведения о том, как напрямую создавать и настраивать элементы привязки без использования системных привязок, см. в разделе "Пользовательские привязки".
Дополнительные сведения о создании и расширении пользовательских привязок см. в разделе "Расширение привязок".
В WCF все привязки состоят из элементов привязки. Каждый элемент привязки наследуется от класса BindingElement. Предоставляемые системой биндинги, такие как BasicHttpBinding, создают и настраивают собственные элементы биндинга. В этом разделе показано, как получить доступ и изменить свойства этих элементов привязки, которые напрямую не представлены в привязке, в частности, класса BasicHttpBinding.
Отдельные элементы привязки содержатся в коллекции, представленной BindingElementCollection классом, и добавляются в этом порядке: поток транзакций, надежный сеанс, безопасность, составной дуплекс, односторонняя, потоковая безопасность, кодировка сообщений и транспорт. Обратите внимание, что не все перечисленные элементы привязки требуются в каждой привязке. Определяемые пользователем элементы привязки также могут отображаться в этой коллекции элементов привязки и должны отображаться в том же порядке, что и ранее описано. Например, определяемый пользователем транспорт должен быть последним элементом коллекции элементов привязки.
Класс 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. 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Создайте пользовательскую привязку из привязки и создайте BindingElementCollection класс из одного из свойств пользовательской привязки.
// 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Переберите класс BindingElementCollection, и когда вы найдёте класс HttpTransportBindingElement, установите его свойство KeepAliveEnabled в значение
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