Практическое руководство. Создание пользовательской привязки с использованием элемента SecurityBindingElementHow to: Create a Custom Binding Using the SecurityBindingElement

Windows Communication Foundation (WCF) включает несколько предоставляемых системой привязок, которые можно настроить, но не обеспечивают полную гибкость при настройке всех параметров безопасности, поддерживаемых WCF.Windows Communication Foundation (WCF) includes several system-provided bindings that can be configured but do not provide full flexibility when configuring all the security options that WCF supports. В этом разделе описывается создание пользовательской привязки непосредственно из отдельных элементов привязки с рассмотрением некоторых из параметров безопасности, которые могут быть заданы при создании такой привязки.This topic demonstrates how to create a custom binding directly from individual binding elements and highlights some of the security settings that can be specified when creating such a binding. Дополнительные сведения о создании пользовательских привязок см. в разделе Расширение привязок.For more information about creating custom bindings, see Extending Bindings.

Предупреждение

SecurityBindingElement не поддерживает форму канала IDuplexSessionChannel, которая по умолчанию используется формами каналов TCP-транспорта, если свойство TransferMode имеет значение Buffered.SecurityBindingElement does not support the IDuplexSessionChannel channel shape, which is the default channel shape use by the TCP transport when TransferMode is set to Buffered. Необходимо задать свойству TransferMode значение Streamed для использования элемента SecurityBindingElement в этом сценарии.You must set TransferMode to Streamed in order to use SecurityBindingElement in this scenario.

Создание пользовательской привязкиCreating a Custom Binding

В WCF все привязки состоят из элементов привязки.In WCF all bindings are made up of binding elements. Каждый элемент привязки наследуется от класса BindingElement.Each binding element derives from the BindingElement class. В случае стандартных предоставляемых системой привязок элементы привязки уже созданы и настроены, хотя значения некоторых свойств можно изменить.For the standard system-provided bindings, the binding elements are created and configured for you, although you can customize some of the property settings.

В противоположность этому при создании пользовательской привязки потребуется создать и настроить элементы привязки и создать из этих элементов объект CustomBinding.In contrast, to create a custom binding, binding elements are created and configured and a CustomBinding is created from the binding elements.

Для этого необходимо добавить отдельные элементы привязки в коллекцию, представляемую экземпляром класса BindingElementCollection, а затем задать свойство Elements класса CustomBinding равным этому объекту.To do this, you add the individual binding elements to a collection represented by an instance of the BindingElementCollection class, and then set the Elements property of the CustomBinding equal to that object. Добавлять элементы привязки необходимо в следующем порядке: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding и Transport.You must add the binding elements in the following order: Transaction Flow, Reliable Session, Security, Composite Duplex, One-way, Stream Security, Message Encoding, and Transport. Обратите внимание, что все перечисленные элементы привязки являются обязательными для каждой привязки.Note that not all the binding elements listed are required in every binding.

SecurityBindingElementSecurityBindingElement

С безопасностью уровня сообщений связаны три элемента привязки; все они наследуются от класса SecurityBindingElement.Three binding elements relate to message level security, all of which derive from the SecurityBindingElement class. Эти три элемента называются TransportSecurityBindingElement, SymmetricSecurityBindingElement и AsymmetricSecurityBindingElement.The three are TransportSecurityBindingElement, SymmetricSecurityBindingElement, and AsymmetricSecurityBindingElement. Элемент TransportSecurityBindingElement используется для обеспечения смешанного режима безопасности.The TransportSecurityBindingElement is used to provide Mixed mode security. Другие два элемента используются, когда безопасность обеспечивается уровнем сообщений.The other two elements are used when the message layer provides security.

При обеспечении безопасности на транспортном уровне используются дополнительные классы:Additional classes are used when transport level security is provided:

Обязательные элементы привязкиRequired Binding Elements

Существует большое количество возможных элементов привязки, которые можно сочетать в одной привязке.There are a large number of possible binding elements that can be combined into a binding. При этом не все сочетания являются допустимыми.Not all of these combinations are valid. В этом разделе описываются обязательные элементы, которые должны присутствовать в привязке безопасности.This section describes the required elements that must be present in a security binding.

Допустимые привязки безопасности зависят от многих факторов, в том числе:Valid security bindings depend on many factors, including the following:

  • режима безопасности;Security mode.

  • транспортного протокола;Transport protocol.

  • шаблона обмена сообщениями (MEP), заданного в контракте.The message exchange pattern (MEP) specified in the contract.

В следующей таблице приведены допустимые конфигурации стека элементов привязки для каждого сочетания перечисленных выше факторов.The following table shows the valid binding element stack configurations for each combination of the preceding factors. Эти конфигурации представляют собой минимальные требования.Note that these are minimal requirements. В привязку можно добавлять дополнительные элементы, такие как элементы для кодирования сообщений, элементы для транзакций и другие.You can add additional binding elements to the binding, such as message encoding binding elements, transaction binding elements, and other binding elements.

Режим безопасностиSecurity Mode ТранспортTransport Шаблон обмена сообщениями в контрактеContract Message Exchange Pattern Шаблон обмена сообщениями в контрактеContract Message Exchange Pattern Шаблон обмена сообщениями в контрактеContract Message Exchange Pattern
Datagram Request Reply Duplex
ТранспортTransport HttpsHttps
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP
OneWayBindingElementOneWayBindingElement
SSL или Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL или Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL или Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
СообщениеMessage HttpHttp SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElementSymmetricSecurityBindingElement SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
CompositeDuplexBindingElementCompositeDuplexBindingElement
OneWayBindingElementOneWayBindingElement OneWayBindingElementOneWayBindingElement
HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement HttpTransportBindingElementHttpTransportBindingElement
TCPTcp SecurityBindingElementSecurityBindingElement SecurityBindingElementSecurityBindingElement SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement
Смешанный (транспорта с учетными данными сообщения)Mixed (transport with message credentials) HttpsHttps TransportSecurityBindingElementTransportSecurityBindingElement TransportSecurityBindingElementTransportSecurityBindingElement
OneWayBindingElementOneWayBindingElement
HttpsTransportBindingElementHttpsTransportBindingElement HttpsTransportBindingElementHttpsTransportBindingElement
TCPTCP TransportSecurityBindingElementTransportSecurityBindingElement SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation) SymmetricSecurityBindingElement (режим проверки подлинности = SecureConversation)SymmetricSecurityBindingElement (authentication mode = SecureConversation)
OneWayBindingElementOneWayBindingElement
SSL или Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL или Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement SSL или Windows StreamSecurityBindingElementSSL or Windows StreamSecurityBindingElement
TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement TcpTransportBindingElementTcpTransportBindingElement

Обратите внимание, что у элементов привязки безопасности имеется ряд настраиваемых параметров.Note that there are many configurable settings on the SecurityBindingElements. Дополнительные сведения см. в разделе режимы проверки подлинности SecurityBindingElement.For more information, see SecurityBindingElement Authentication Modes.

Дополнительные сведения см. в разделе безопасные беседы и безопасные сеансы.For more information, see Secure Conversations and Secure Sessions.

ПроцедурыProcedures

Создание пользовательской привязки с использованием элемента SymmetricSecurityBindingElementTo create a custom binding that uses a SymmetricSecurityBindingElement

  1. Создайте экземпляр класса BindingElementCollection с именем outputBec.Create an instance of the BindingElementCollection class with the name outputBec.

  2. Вызовите статический метод M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), который возвращает экземпляр класса SymmetricSecurityBindingElement.Call the static method M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true), which returns an instance of the SymmetricSecurityBindingElement class.

  3. Добавьте объект SymmetricSecurityBindingElement в коллекцию (outputBec), вызвав метод Add класса Collection<T> класса BindingElement.Add the SymmetricSecurityBindingElement to the collection (outputBec) by calling the Add method of the Collection<T> of BindingElement class.

  4. Создайте экземпляр класса TextMessageEncodingBindingElement и добавьте его в коллекцию (outputBec).Create an instance of the TextMessageEncodingBindingElement class and add it to the collection (outputBec). Этим задается кодирование, используемое привязкой.This specifies the encoding used by the binding.

  5. Создайте объект HttpTransportBindingElement и добавьте его в коллекцию (outputBec).Create a HttpTransportBindingElement and add it to the collection (outputBec). Этим указывается, что привязка использует транспорт по протоколу HTTP.This specifies that the binding uses the HTTP transport.

  6. Создайте новую пользовательскую привязку путем создания экземпляра класса CustomBinding и передачи коллекции outputBec конструктору.Create a new custom binding by creating an instance of the CustomBinding class and passing the collection outputBec to the constructor.

  7. Полученная пользовательская привязка обладает многими из характеристик стандартной привязки WSHttpBinding.The resulting custom binding shares many of the same characteristics as the standard WSHttpBinding. Она предусматривает безопасность уровня сообщений и учетные данные Windows (однако отключает безопасные сеансы), требует внештатного задания учетных данных службы и не шифрует подписи.It specifies message-level security and Windows credentials but disables secure sessions, requires that the service credential be specified out-of-band, and does not encrypt signatures. Последним можно управлять, только если определить свойство MessageProtectionOrder, как показано на шаге 4.The last can be controlled only by setting the MessageProtectionOrder property as shown in step 4. Другими двумя можно управлять с помощью параметров стандартной привязки.The other two can be controlled using settings on the standard binding.

ПримерExample

ОписаниеDescription

Следующий пример кода представляет собой полноценную функцию для создания пользовательской привязки с использованием класса SymmetricSecurityBindingElement.The following example provides a complete function to create a custom binding that uses a SymmetricSecurityBindingElement.

КодCode

// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
    SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
Public Shared Function CreateCustomBinding() As Binding
    ' Create an empty Custom Binding to populate, 
    Dim binding As New CustomBinding()
    ' Create a SymmetricSecurityBindingElement.
    Dim ssbe As SymmetricSecurityBindingElement
    ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
    ' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
    binding.Elements.Add(ssbe)
    binding.Elements.Add(New TextMessageEncodingBindingElement())
    binding.Elements.Add(New HttpTransportBindingElement())
    Return New CustomBinding(binding)

End Function

См. такжеSee also