Welcome

首页 / 软件开发 / .NET编程技术 / WCF后续之旅(18):谈谈Binding

WCF后续之旅(18):谈谈Binding2011-01-03 cnblogs artech1.信道层与服务模型层(Channel Layer and Service Mode Layer)

对于一个分布式应用的开发与设计来说,通信问题是不得不考虑,同时也是最为复杂、最难实现的问题。在过去的若干年中, 微软先后推出了一系列广受欢迎的通信技术, 比如DCOM、Enterprise Service、.NET Remoting、XML Web Service、MSMQ等等。这些技术提供了各自的编程模型,是开发人员从繁琐的完全基于通信的编程中解脱出来,使之仅仅需要关注具体的业务逻辑。WCF是所有的这些通信技术集大成者,它充分地整合了所有这些使用于不同领域、不同场景的通信技术,提供了一个统一的编程模型。

无论从功能上讲,还是从WCF的整个基础构架的层次结构上讲,WCF可以分成两个不部分:编程模型和通信实现。编程模型通过WCF服务模型层(service mode layer)提供,而信道层 (channel layer) 则提供了具体的通信的实现。服务模型层建立在信道层之上,对于一般的WCF开发人员来讲,他们仅仅会接触到服务模型层,而信道层则是被屏蔽掉的。

2.信道与信道栈(Channel and Channel Stack)

WCF的通信是基于消息的,如果从消息交换(message exchange)的角度讲,信道层则可以看成是进行消息交换参与者之间的中介。信道层通过一个个信道组成一个连续的信道栈,该信道栈构成了一个消息流通的管道。消息的发送者通过该管道流到消息的接收者,消息的接收者对消息进行相应的处理,生成新的消息通过该管道回复给消息的发送者。

但是,不要将这个通过一系列信道组成的管道的功能仅仅局限于消息的传输,实际上该管道承载着许多额外的功能。

我们可以打个比方,比如一个自来水厂,水源可能取自天然的湖水,在水厂生产的水最终通过自来水管流到居民的家中被饮用之前,需要对水进行必要的处理。中间的流程可能是这样的:湖水被汲取到一个池子中先进行杂质的过滤(我们称这个池为过滤池);被过滤后的水流到第二个池子中进行消毒处理(我们称这个池为消毒池);被消毒处理的后水流到第三个池子中进行水质软化处理(我们称这个池为软化池);最终水通过自来水管道流到居民的家中。

实际上,我们将的信道栈就相当于一个自来水厂,而构成信道栈的一个个信道就相当过滤池、消毒池、软化池以及自来水管道。唯一不同的是,自来水厂处理的是水,而信道栈处理的是消息(message)。这样设计的最大的好处就是具有很强的可扩展性,因为我们不可能、也没有必要设计出一种信道能够进行所有的消息处理任务,我们需要做的仅仅让一个信道专注于某一种功能的实现,通过对信道的合理组合从而实现我们实际的消息处理的功能。

对于一个自来水厂来说,最终的目的上自己生产的水让消费者能够饮用,所以自来水管道是必须的,至于中间的环节,过滤、消毒、软化、……,可能在水质良好的情况下就不是必要的了。与此类似,对于一个信道栈来说,有两种信道是必须的:传输信道(transport channel)和消息编码信道(message encoding channel)。原因很简单,信道栈的目的就是实现消息的传输,传输信道肯定是必须的,而进行传输的前提,需要对消息进行合理编码,比如基于文本编码和二进制编码。如下图所示: