概述
每个服务终结点都包含一个地址Address、一个绑定Binding 和一个 契约Contract。契约指定可用的操作,绑定指定如何与服务进行通信,而地址指 定查找服务的位置,在WCF专题系列前5篇中,深入了解了WCF中寻址的细节。本 文为消息如何传递之绑定第二部分,将详细介绍WCF内置的各种绑定元素,绑定 元素之间的顺序以及如何创建一个自定义的绑定元素。
在WCF专题系列( 6):消息如何传递之绑定Part 1一文中,我提到绑定由绑定元素组成,每个绑 定元素用来描述终结点与客户端通信方式中的某个方面,在发送或接收消息时, 每个绑定元素都表示一个处理步骤;运行时,绑定元素会创建必要的通道和侦听 器,用以生成传出和传入通道堆栈,其中三种主要的绑定元素是协议绑定元素, 编码绑定元素以及传输绑定元素,下面再对它们重新认识一下。
协议绑 定元素
这些元素表示对消息执行的更高级别的处理步骤,如可靠性、安全性 、事务等处理,由这些绑定元素创建的通道和侦听器可以添加、移除或修改消息 内容,以符合WS-*系列规范,给定的绑定可以具有0或多个协议绑定元素,WCF中 内置的几种协议绑定元素,其中包括:
1.ReliableSessionBindingElement:该绑定元素会在堆栈中提供一个可 选层,该可选层可在终结点之间建立可靠会话并配置此会话的行为。所谓的可靠 性,是指SOAP消息可以在不可靠的网络上(如HTTP)进行可靠的传递,保证消息 无重复的、消息次序正确的进行交换,它的原理是:为一组消息设定相同的ID, 根据消息号将消息编组,并根据顺序号进行排序,大家可以参考WS-Reliability 和WS-ReliableMessaging协议。它的定义如下所示:
public sealed class ReliableSessionBindingElement
: BindingElement, IPolicyExportExtension
{
public bool Ordered { get; set; }
public ReliableMessagingVersion ReliableMessagingVersion { get; set; }
// 更多成员
}
WCF中内置的几个绑定已 经包含了ReliableSessionBindingElement,如果要添加该元素到其它绑定上, 可以使用如下配置:
<bindings>
<customBinding>
<binding name="reliabilityhttp">
<reliableSession/>
</binding>
</customBinding>
</bindings>
2.SecurityBindingElement:该绑定元素为WCF 中SOAP消息安全绑定元素的基类,它有三种具体的实现:支持对称加密通道安全 的SymmetricSecurityBindingElement、支持不对称加密通道安全的 AsymmetricSecurityBindingElement 和 支持混合模式通道安全的 TransportSecurityBindingElement,如下图所示:
这些实现为在WS-Security Policy规范中定义的绑定建模,在创建自 定义绑定中,我们需要提供SecurityBindingElement的某一个具体的实现,或者 自定义一个类从SecurityBindingElement继承。