随着WCF的快速发展,WCF已经成为了人尽皆知的一种编程技术,现在我们就来一起看看它的内在原理。本文介绍了如何建立可绑定的WCF通道。首先,我们将研究一下通道的内部机理,然后再看一下如何使用WCF类来实现一个通道。
什么是WCF通道
如果将服务比作人类的身体,那么通道就是我们服务的神经系统。神经系统担负着从身体的各部分接受信息并传递给大脑的重担。其中不同的感觉信息通过多路神经以同样的方式传递给大脑。和神经系统类似,WCF通道建立和传输消息,并将这些消息从一个通道传输到另一个通道。但和神经系统不同的是,通道不是使用感觉接受器接受信息,而是通过从网络上接受字节来建立信息。
有两个通道类型:传输通道(Transport Channels)和协议通道(Protocol Channels)。传输通道负责网络中的通信。而协议通道负责象数据的加密、解密的事情。通道栈中处于栈顶的消息被叫做Dispatcher的一系列WCF类获取并发送,Dispatcher将被我们创建并映射到我们的服务的契约(Contract)上。整个通道栈和Dispatcher的安排:
一个传输通道位于通道栈的***端。数据(消息)从传输通道开始流动,通过位于通道栈的通道集合。Dispatcher实际上是一系列类的集合。本文并不会详细讨论Dispatcher构造,如果想详细了解Dispatcher的情况,请参阅相关的WCF文档。也许到现在我们可以猜到,在通道栈中的通道远比我们想象的多。而正是这些通道的存在使通道栈做着魔术般的工作。
什么是通道栈
一个通道栈由很多通道(Channels)、通道管理器(ChannelManagers)以及其他完成特殊工作的类,如将字节流转换为消息的类。本文将主要关注一下通道和通道管理器所起的角色。
通道管理器负责建立和维护通道。通道管理器由以下两个部分组成:
1. 通道工厂(ChannelFactories)通过一个客户端通信系统来建立和管理通道。
2. 通道监听器(ChannelListeners)通过一个服务来建立和管理通道。
本文将关注位于WCF内部的服务,因此,我们我们将关注通道监听器和通道栈中的通道在整个系统中的角色。绑定(Bindings)是一些绑字元素的集合。这些绑定元素建立通道监听器,而监听器建立和管理通道。
#T#根据微软提供的文档,数据从一个通道到达另一个通道会衰减,而这些会被通道监听器捕获并处理。在我们讨论通道监听器和通道如何在一起工作并为我们提供通讯服务之前,有一个重要的思想必须理解。一个状态机管理WCF通讯中的所有状态。在状态机中的状态都是可预料的,如Open、Abort、Close等等。所有参与通讯状态机的类都支持ICommunicationObject接口。如果想了解完整的 WCF通讯状态机的定义,请参阅相关的WCF文档。到现在为止,我已经向读者介绍了一个通道栈的组成,下面让我们来看看如何编写代码来控制通道栈。