1、Wcf是微软推出的一套“分布式”“通信”框架
Wcf是微软推出的一套“分布式”“通信”框架。提到通信,无外乎就是将消息从一个地方传递到另一个地方,wcf中将消息的发送者定义为客户端,消息的接收者定义为服务端。为了达到消息传递的目的,需要解决3个主要问题:where、how及what。Where指的是“消息传递至何处”。How指的是“如何传递消息”。What指“通信双方对消息结构的定义”以及“消息接收者针对消息所能作出的响应”。针对这三个问题,wcf中定义了终结点地址、绑定和契约三个对象。终结点地址代表通信的目的地。绑定定义了客户端和服务端之间通信的所有细节。契约则是服务端和客户端之间的一个约定,定义了服务端所能提供的操作,以及服务端和客户端之间传递消息的格式。Wcf中客户端和服务端之间的通信是基于终结点来进行的。终结点封装了地址、绑定和契约。要想顺利的完成通信工作,只需要针对终结点的地址、绑定和契约来进行配置。Wcf中提供了代码、配置文件和特性等方式来对通信细节进行配置。
2、终结点地址
对于地址,需要考虑的问题有:不同协议的地址配置,客户端和服务端地址的配置,逻辑地址和物理地址的配置,不同寄宿方式时地址的配置,基地址+相对地址的配置,端口共享的配置等等。
3、绑定
对于绑定,需要明白信道栈模型及绑定模型以及两者之间的关系。先说说信道栈,信道栈是信道的有序集合,不同的信道完成不同的功能,传输信道采用不同的协议完成消息的传输、消息编码信道采用不同的方式对消息进行编码,协议信道是对不同WS-*协议的实现,完成事务流转、安全、可靠等特殊功能。传输信道和消息编码信道是必须的。消息在信道栈中传输,会依次经过传输信道、消息编码信道和协议信道的处理,从而完成消息传输一些细节控制。这个结构我们可以成为信道栈模型。与此相对应,wcf提出了绑定模型,绑定模型是绑定元素的有序集合,绑定元素创建信道管理器(客户端叫信道工厂,服务端叫信道监听器),信道管理器创建信道。所以说绑定创建了信道栈。系统中预定义了大量的绑定来满足不同的需求,BasicHttpBinding、NetTcpBinding、NetNamedPipeBinding、WSHttpBinding、NetMsmqBinding。当预定义的绑定都无法满足的需求时,还可以使用CustomBinding来定义自己的绑定,只需将的选中的绑定元素添加进CustomBinding即可,可以使用代码、配置文件甚至配置工具来完成这个操作。Wcf是一个高度可扩展的框架,还可以自定义信道、信道管理器及绑定元素来满足个性化需求。
4、契约
对于契约,包括服务契约、数据契约、消息契约和错误契约。服务契约关注服务提供操作的描述;数据契约关注交互双方数据格式的描述;消息契约关注数据成员在消息中格式的描述。Wcf中契约使用特性来进行配置。Wcf中,针对契约的操作还包括序列化和反序列化操作。编程模型中使用clr类,而在传输过程中使用的soap消息,所以自然需要有序列化和反序列化的支持才能达到这个目的。Wcf中使用的序列化器是DataContractSerializer。
5、服务实例和会话管理
Wcf中,客户端调用服务端的服务,最终目的还是需要调用服务的相关操作得到想要的数据。那么肯定存在服务实例的管理工作。服务实例的管理由实例上下文来完成。服务服务的激活及操作的执行。另外,还需要考虑会话的问题,会话指同一个客户端多次调用同一个服务时,是否需要纳入一个会话中的问题。Wcf中提供了3中实例上下文模式对实例和会话进行管理。分别是单调、单例和会话。不同模式下,实例的存活周期,并发均不同。
6、总结
Wcf是通信框架设计的最佳实现。它涉及到的概念极其广泛,如SOA,传输协议,会话,事务,安全性,可靠性等等。另外,wcf中广泛使用到工厂模式,职责连模式,订阅/发布模式,管道模式等等。在asp.net mvc、asp.net web api中也普遍存在这些设计思想的身影。