WCF体系架构基本概念解读

开发 开发工具
WCF体系架构的了解,对于掌握这一功能强大的开发工具是一个至关重要的步骤。那么接下来就让我们一起来看看相关的内容吧。

我们如果想要充分的掌握应用WCF开发工具,首先需要了解的就是这一工具的一些基本概念。比如今天为大家介绍的WCF体系架构,就是初学者们在学习过程中需要掌握的一个最基本的概念。#t#

在了解WCF体系架构之前,首先需要叩问自己服务是否需要与非WCF的客户端交互。如果是,同时客户端又是旧的MSMQ客户端,选择MsmqIntegrationBinding绑定就能够使得服务通过MSMQ与该客户端实现互操作。如果服务需要与非WCF客户端交互,并且该客户端期望调用基本的Web服务协议(ASMX Web服务),那么选择BasicHttpBinding绑定就能够模拟ASMX Web服务(即WSI-Basic Profile)公开WCF服务。缺点是我们无法使用大多数最新的WS-*协议的优势。

但是,如果非WCF客户端能够识别这些标准,就应该选择其中一种WS绑定,例如WSHttpBinding、WSFederationBinding或者WSDualHttpBinding。如果假定客户端为WCF客户端,同时需要支持脱机或断开状态下的交互,则可以选择NetMsmqBinding使用MSMQ传输消息。如果客户端需要联机通信,但是需要跨机器边界调用,则应该选择NetTcpBinding通过TCP协议进行通信。如果相同机器上的客户端同时又是服务,选择NetNamePipeBinding使用命名管道可以使性能达到最优化。如果基于额外的标准,例如回调(选择WSDualHttpBinding)或者联邦安全(选择WSFederationBinding),则应对选择的绑定进行微调。

即使超出了使用的目标场景,大多数绑定工作仍然良好。例如,我们可以使用TCP绑定实现相同机器甚至进程内的通信;我们也可以使用基本绑定实现Intranet中WCF对WCF的通信。

WCF体系架构提供了对可靠性、事务性、并发管理、安全性以及实例激活等技术的有力支持,它们均依赖于基于拦截机制的WCF体系架构。通过代理与客户端的交互意味着WCF总是处于服务与客户端之间,拦截所有的调用,执行调用前和调用后的处理。当代理将调用栈帧(Stack Frame)序列化到消息中,并将消息通过通道链向下传递时,WCF就开始执行拦截。

通道相当于一个拦截器,目的在于执行一个特定的任务。每个客户端通道都会执行消息的调用前处理。链的组成与结构主要依赖于绑定。例如,一个通道对消息编码(二进制格式、文本格式或者MTOM),另一个通道传递安全的调用上下文;还有一个通道传播客户端的事务,一个通道管理可靠会话,另一个通道对消息正文(Message Body)加密(如果进行了配置),诸如此类。客户端的最后一个通道是传输通道,根据配置的传输方式发送消息给宿主。

在宿主端,消息同样通过通道链进行传输,它会对消息执行宿主端的调用前处理。宿主端的第一个通道是传输通道,接收传输过来的消息。随后的通道执行不同的任务,例如消息正文的解密、消息的解码、参与传播事务、设置安全准则、管理会话、激活服务实例。宿主端的最后一个通道负责将消息传递给分发器(Dispatcher)。分发器将消息转换到一个栈帧,并调用服务实例。执行顺序如图所示。

WCF体系架构执行顺序 

服务并不知道它是否被本地客户端调用。事实上,服务会被本地客户端——分发器调用。客户端与服务端的拦截器确保了它们能够获得运行时环境,以便于它们执行正确的操作。服务实例会执行调用,然后将控制权(Control)返回给分发器。分发器负责将返回值以及错误信息(如果存在)转换为一条返回消息。

分发器获得控制权,执行的过程则刚好相反:分发器通过宿主端通道传递消息,执行调用后的处理,例如管理事务、停用实例、回复消息的编码与加密等。为了执行客户端调用后的处理,包括解密、解码、提交或取消事务等任务,传输通道会将返回消息发送到客户端通道。最后一个通道将消息传递给代理。代理将返回消息转化到栈帧,然后将控制权返回给客户端。

特别值得注意的是,WCF体系架构中的所有要点均与可扩展性息息相关。我们可以为专有交互定制通道,为实例管理定制行为,以及定制安全行为等。事实上,WCF提供的标准功能都能够通过相同的可扩展模式实现。

责任编辑:曹凯 来源: IT168
相关推荐

2009-12-21 14:37:14

2010-02-25 14:46:31

2010-03-01 16:41:04

WCF数据表

2009-12-22 10:16:54

WCF服务状态

2009-12-21 10:27:52

WCF基本概念

2010-02-23 16:32:29

WCF服务

2010-03-01 14:50:30

WCF行为类型

2009-12-21 15:33:07

WCF集合元素

2010-03-01 18:04:35

WCF配置绑定

2010-02-24 17:17:04

WCF宿主环境

2010-03-02 13:14:38

WCF MSMQ队列

2009-12-21 16:52:02

WCF序列化

2010-03-02 16:22:31

WCF状态应用

2010-03-02 11:10:43

WCF标准终结点

2010-03-01 17:57:11

WCF缓存机制

2010-04-01 16:54:06

Oracle体系结构

2010-01-25 10:57:57

Android系统应用

2011-03-28 11:05:17

ODBC

2010-07-02 11:48:30

RS-232C协议

2021-05-17 07:22:05

Elasticsear架构存储
点赞
收藏

51CTO技术栈公众号