什么是绑定
从本质上说,WCF是一个通信服务框架,它允许我们使用不同 的传输协议(如Http、Https、TCP、P2P、IPC和MSMQ等),使用不同的消息编码 形式(文本、二进制和MTOM),跟不同的WS-*系列规范(如WS-Security、WS- Atomic Transaction等)交互。所有这些细节都是由通道堆栈来处理的,看一下 Aaron Skonnard给出的这幅图:
图1
最底层传输组件读入消息,消息编码器将传入字节读取为 逻辑消息对象,之后消息通过通道堆栈中的各个消息,它们执行各自的处理。如 果对这三者之间之间进行组合,至少可以得到上千种不同的通信方式,但是这些 传输、编码以及协议之间有些是互斥的,有些相互约束,也就是说,对于开发人 员来说,每构建一个服务,都要需要考虑这三者之间是否可以共存,是否是高效 的通信方式,显然这个工作是非常复杂的,要求开发者必须了解所有的传输、编 码以及协议等。
为了简化这三者之间的管理,WCF中引入了绑定的概念( Binding),每个绑定中都封装了传输协议、消息编码和多种协议的集合,这样 在构建服务时,我们就可以直接选择一个适用的绑定,通过调整它们的属性来适 应需求,如果系统内置的绑定通过调整属性仍然不能达到我们的要求,这时才会 考虑自定义绑定。这样,通过绑定,就把应用程序编程模型与通道模型(后面会 有专门的文章写到)关联了起来,对于开发者来说,就无需再考虑复杂的底层通 道模型,直接使用应用程序编程模型。
绑定元素
在WCF中,绑定由绑 定元素组成,每个绑定元素用来描述终结点与客户端通信方式中的某个方面,绑 定元素继承于BindingElement,其中最重要的绑定元素有如下三种:
1. 编码绑定元素(Encoding Binding Element):如采用文本、二进制还是MTOM的 方式;
2.传输绑定元素(Transport Binding Element):使用Http、 TCP或者MSMQ进行传输;
3.协议绑定元素(Protocol Binding Element) :指定可靠性、安全性、事务等。
每个绑定必须要有一个编码绑定元素 和一个传输绑定元素,以及包括任意数目的其他协议绑定元素。