到目前为止,对WCF了解的人越来越多,我也不是个例外,对它的体系结构我也是很了解的,下面的内容就是讲解WCF架构的。WCF为可靠性、事务、安全和实例激活等提供了极其宝贵的支持,所有这些都依赖于WCF基于拦截的架构。让客户端与代理交互意味着,WCF总是介于服务和客户端之间来拦截调用并且执行预调用和调用后处理。当代理把调用堆栈帧串行化为一条消息并且沿着一个通道链发送消息时,该解释即开始。
#T#每一个客户端通道都要做消息的预调用处理。这个链的正确结构和组成在很大程度上依赖于绑定。例如,其中一个通道负责编码该消息(二进制,文本或MTOM),一个通道负责传递安全调用上下文,一个通道负责传播客户端事务,一个通道负责管理可靠的会话,一个通道负责加密消息正文(如果这样配置的话),等等。客户端的最后一个通道是传输通道,它负责把消息由经配置的传输传送到宿主。
在宿主端,该消息也经过一个通道链,从而实现宿主端消息的预调用处理。在宿主端的第一个通道是传输通道,它接收来自传输的消息。随后的通道执行各种任务,例如解密消息正文、译解消息、把传播的事务设置到执行线程、设置安全主管、管理会话和激活服务实例。最后一个通道在宿主端把该消息传递到调度器。由调度器把该消息值的转换成一个堆栈帧并且调用服务实例。图描述了这一顺序。
图:WCF架构看上去的样子。
在客户端和服务端的拦截都要确保客户端和服务得到它们所要求的运行时刻环境以便正确运行。由服务实例执行该调用并且把控制返回到调度器,由它把返回值和错误信息(如果有的话)转换成一条返回消息。现在,整个过程被颠倒:调度器通过宿主端通道传送消息以执行调用后处理,例如管理事务、撤销实例、编码应答信息、加密它,等等。返回的消息转到传输通道,在此把消息发送到客户端通道以便客户端调用后处理:解密,编码,提交或取消事务,等等。
由代理把返回的消息转换成一个堆栈帧并且把控制返回到客户端。最值得注意的是,在这个WCF架构中的几乎所有的点都提供了可扩展性钩子-你可以为专利性行为提供定制通道,定制实例管理或定制安全。事实上,WCF提供的这些标准工具都是使用相同的可扩展性模型实现的。