WCF专题系列(8):深度通道编程模型Part 1—设计篇2010-11-25 cnblogs terrylee引言从本质上说,WCF是一个通信服务框架,它允许我们使用不同的传输 协议,使用不同的消息编码形式,跟不同的WS-*系列规范交互,而所有这些细节 都是由通道堆栈来处理的。为了简化这些处理,在WCF中提供了两种模型,一是 针对开发者的应用程序模型;二是用来通信的通道模型,这样对于开发者来 说,只要了解应用程序编程模型就足够了,而不会涉及到通道模型,然而,对于 通道模型进行必要的学习,可以让我们真正理解WCF中“通信”概念 ,了解WCF的 整个架构体系,从而构建出更加健壮的WCF服务或者对WCF框架进行 扩展。在本文中,我们将进行深度了解WCF中的通道模型是如何设计的。通道模型概述在WCF中,提供了一系列的接口和其它类型模型,它们为消息的 发送和接收提供了一个底层的编程模型,该模型称之为WCF通道模型。在通道模 型中,一个很重要的概念是通道堆栈,它是具有一个或多个消息处理通道的分层 的通信堆栈,堆栈中放置了各种类型的通道,用来对象进行处理,如在通道堆栈 的最底层放置了传输通道,它负责使通道堆栈适应基础传输,如图1所示:

图1在通道堆栈中,不仅仅提供消息的传输方式,还提供了其 它诸如对消息的内容或者消息头进行处理的功能,这些功能同样是以通道的方式 放置在通道堆栈中,甚至于我们可以编写自己的通道,加入到通道堆栈中。消息在通道堆栈中传输时,将作为Message对象流过通信堆栈,如传输通 道负责在发送方和接收方之间转换消息,之后消息将通过传输通道继续往上流, 依次经过通道堆栈中的各个通道,这些通道各自负责提供一种通信功能,如在消 息头中添加信息,对消息的正文进行加密等等。通道对象模型通道对 象模型是实现通道、通道侦听器和通道工厂所必需的一组核心接口。还提供一些 基类以辅助自定义实现。可以看到通道模型中最重要的有三组接口:通道、通道 侦听器和通道工厂。每个通道均实现一个或多个接口,称为通道形状接口或通道 形状;通道侦听器负责侦听传入消息,即在消息的接收端,然后通过由通道侦听 器创建的通道将这些消息传送到上面的层;通道工厂负责创建通道用于发送消息 ,即在消息的发送方,并在通道工厂关闭时,关闭通道工厂创建的所有通道。在通道模型中,最重要的一个接口是ICommunicationObject,它定义了 所有通信对象实现的基本状态机的核心接口,自定义通道通信对象可以直接实现 ICommunicationObject,如图2所示:

图2