如何:使用 SecurityBindingElement 创建自定义绑定

Windows Communication Foundation (WCF) 包括多个系统提供的绑定,虽然这些绑定可进行配置,但在配置 WCF 支持的所有安全选项时仍显得不够灵活。本主题演示如何直接从各个绑定元素创建自定义绑定,并着重说明创建这样的绑定时可以指定的一些安全设置。有关创建自定义绑定的更多信息,请参见扩展绑定

创建自定义绑定

在 WCF 中,所有绑定都由绑定元素**组成。每个绑定元素都是从 BindingElement 类派生的。对于系统提供的标准绑定,已为您创建和配置绑定元素,但您仍可以自定义某些属性设置。

相比之下,若要创建自定义绑定,应创建并配置绑定元素,然后从绑定元素创建 CustomBinding

为此,将各个绑定元素添加到由 BindingElementCollection 类的实例表示的集合,然后将 CustomBindingElements 属性设置为等于该对象。必须按以下顺序添加绑定元素:事务流、可靠会话、安全、复合双工、单向、流安全、消息编码和传输。请注意,并不是每个绑定中都需要所列的所有绑定元素。

SecurityBindingElement

有三个绑定元素与消息级安全性有关,它们都派生自 SecurityBindingElement 类。这三个绑定元素是 TransportSecurityBindingElementSymmetricSecurityBindingElementAsymmetricSecurityBindingElementTransportSecurityBindingElement 用于提供混合模式安全。当消息层提供安全时,使用其他两个元素。

在提供传输级安全时,将使用其他类:

必需的绑定元素

有大量的可能绑定元素可以组合为绑定。并非所有这些组合都是有效的。本节介绍安全绑定中必须存在的元素。

有效的安全绑定取决于多种因素,其中包括:

  • 安全模式。

  • 传输协议。

  • 协定中指定的消息交换模式 (MEP)。

下表显示上述因素各种组合的有效绑定元素组合配置。请注意,这些是最低要求。您可以向绑定添加更多绑定元素,如消息编码绑定元素、事务绑定元素和其他绑定元素。

安全模式 传输 协定消息交换模式

Datagram

Request Reply

Duplex

传输

Https

OneWayBindingElement

HttpsTransportBindingElement

HttpsTransportBindingElement

TCP

OneWayBindingElement

SSL 或 Windows StreamSecurityBindingElement

SSL 或 Windows StreamSecurityBindingElement

SSL 或 Windows StreamSecurityBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

消息

Http

SymmetricSecurityBindingElement

SymmetricSecurityBindingElement

SymmetricSecurityBindingElement(身份验证模式 = SecureConversation)

CompositeDuplexBindingElement

OneWayBindingElement

OneWayBindingElement

HttpTransportBindingElement

HttpTransportBindingElement

HttpTransportBindingElement

Tcp

SecurityBindingElement

SecurityBindingElement

SymmetricSecurityBindingElement(身份验证模式 = SecureConversation)

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

混合(带有消息凭据的传输)

Https

TransportSecurityBindingElement

TransportSecurityBindingElement

OneWayBindingElement

HttpsTransportBindingElement

HttpsTransportBindingElement

TCP

TransportSecurityBindingElement

SymmetricSecurityBindingElement(身份验证模式 = SecureConversation)

SymmetricSecurityBindingElement(身份验证模式 = SecureConversation)

OneWayBindingElement

SSL 或 Windows StreamSecurityBindingElement

SSL 或 Windows StreamSecurityBindingElement

SSL 或 Windows StreamSecurityBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

TcpTransportBindingElement

请注意,SecurityBindingElements 有许多可配置的设置。有关更多信息,请参见 SecurityBindingElement 身份验证模式.

有关更多信息,请参见 安全对话和安全会话.

过程

创建使用 SymmetricSecurityBindingElement 的自定义绑定。

  1. outputBec 名称创建 BindingElementCollection 类的实例。

  2. 调用静态方法 M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true),它将返回 SymmetricSecurityBindingElement 类的实例。

  3. 通过调用 BindingElement 类的 CollectionAdd 方法,将 SymmetricSecurityBindingElement 添加到集合 (outputBec) 中。

  4. 创建 TextMessageEncodingBindingElement 类的实例并将其添加到集合 (outputBec) 中。这将指定该绑定所使用的编码。

  5. 创建一个 HttpTransportBindingElement 并将其添加到集合 (outputBec) 中。这将指定该绑定使用 HTTP 传输。

  6. 通过创建 CustomBinding 类的实例并将集合 outputBec 传递给构造函数来创建一个新的自定义绑定。

  7. 生成的自定义绑定具有与标准 WSHttpBinding 相同的许多特性。它指定消息级别的安全性和 Windows 凭据,但禁用安全会话,要求在带外指定服务凭据且不对签名进行加密。最后一条只能按步骤 4 所示通过设置 MessageProtectionOrder 属性来控制。其他两条可以使用标准绑定上的设置进行控制。

示例

说明

下面的示例为创建使用 SymmetricSecurityBindingElement 的自定义绑定提供了一个完整的函数。

代码

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
// 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);

另请参见

参考

SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding

概念

系统提供的绑定

其他资源

扩展绑定