WCF通道模型:

无论交互的另一方的具体位置在哪里,WCF都会为消息的发送和接收建立一套完整的消息管道,这个消息管道被成为通道栈。通道栈中的每一个通道组件都有机会对消息进行处理,而整个通道栈是可编辑且可插入的,这就确保WCF的通道模型具有相当大的灵活性。另外,WCF通道模型是完全和上层程序隔离的,任何一个服务/客户端都可以轻松配置到不同的通道模型上去。通道模型可以被分为两部分——协议通道和传输通道。一个通道栈可以拥有任意多个协议通道,但一般只拥有一个传输通道。传输通道负责把消息进行编码并且发送到远端,编码时需要使用调用栈的编码器。一般而言,协议通道负责维护消息的非业务逻辑功能,包括:事务、日志、可靠消息、安全性等。开发者可以自定义协议通道并插入到通道栈中。在一个通道栈中,必须包含至少一个传输通道和编码器,传输通道负责把消息编码和发送。
WCF体系体系架构是基于拦截机制的,通过代理与客户端的交互意味着WCF总是处于服务与客户端之间,拦截所有的调用,执行调用前和调用后的处理。当代理将调用栈帧序列化到消息中,并将消息通过通道链向下传递时,WCF就开始执行拦截。通道相当于一个拦截器,目的在于执行一个特定的任务。每个客户端通道都会执行消息的调用前处理。链的组成与结构主要依赖于绑定。客户端的最后一个通道是传输通道,根据配置的传输方式发送消息给宿主。在宿主端,消息同样通过通道链进行传输,它会对消息执行宿主端的调用前处理。宿主端的第一个通道是传输通道,接收传输过来的消息。随后的通道执行不同的任务。宿主端的最后一个通道负责将消息传递给分发器。分发器将消息转换到一个栈帧,并调用服务实例。事实上,服务会被本地客户端——分发器调用。客户端与服务端的拦截器确保了它们能够获得运行时环境,以便于它们执行正确的操作。
服务实例会执行调用,然后将控制权返回给分发器。分发器负责将返回值以及错误信息转换为一条返回消息。分发器获得控制权,执行的过程刚好相反:分发器通过宿主端通道传递消息,执行调用后的处理,如管理事务、加密等。为了执行客户端调用后的处理,包括解密、解码、提交或取消事务等任务,传输通道会将返回消息发送到客户端通道。最后一个通道将消息传递给代理。代理将返回消息转化到栈帧,然后将控制权返回给客户端。