信道与信道栈
在信道层,若干信道首尾相连组成一个管道,我们将其称为信道栈。WCF采用基于消息的通信手段,信道栈提供一个消息传输和处理的通道。关于信道栈处理消息的方式,我们可以通过自来水厂的净水流程做一个类比。
有一个为居民提供饮用水的自来水厂,它的任务就是抽取自然水源,进行必要的净化处理,最终输送到居民区。净化处理的流程可能是这样的:天然水源被汲取到一个蓄水池中先进行杂质的过滤(过滤池),被过滤后的水流到第二个池子中进行消毒处理(消毒池),被消毒处理的水流到第三个池子中进行水质软化处理(软化池),最终水通过自来水管道流到居民的家中。
WCF中信道栈就相当于一个自来水厂,而构成信道栈的一个个信道就相当于上面提到的过滤池、消毒池、软化池,以及自来水管道。唯一不同的是,自来水厂处理的是水,而信道栈处理的是消息(Message)。
这样设计的最大好处就是具有很强的可扩展性。水的净化流程具有多个环节,对于消息处理来说,不可能、也没有必要设计出一种万能信道完成所有的消息处理任务。我们更希望的方式是让一个信道专注于单一功能的实现,最终通过对信道有序、合理的组合去完成消息处理任务。
自来水厂旨在为居民提供饮用水,所以从水厂到居民住所之间的自来水管道是必需的,至于中间的过滤、消毒、软化等环节在水质良好的情况下可能就显得不那么必要了。对于WCF的信道栈来说,也有两种必需的信道,即传输信道(Transport Channel)和消息编码信道(Message Encoding Channel)。因为信道栈的最终任务总是实现对消息的网络传输,所以传输信道肯定是必需的;在传输之前需要对消息进行编码,而消息编码功能是通过消息编码信道实现的。所以最简单的信道栈可以只由如图3-1所示的传输信道和消息编码信道组成。