核心对象WCF Dispatcher分析

开发 后端
文章介绍了WCF Dispatcher并不是指的某一个对象,而是指完成整个dispatch功能的一组相关对象的总称,希望大家看了会有帮助。

我们要熟练掌握一门技术的话,我们就要了解它其中的核心技术,下面我就来看看关于WCF重要的核心技术吧。由于应用WCF的是一个分布式环境,按照所处的环境的不同,可以将ServiceMode分成client端的ServiceMode和service端的 ServiceMode。就其实现的复杂度而言,service端的ServiceMode要比client端的复杂很多。对于Service端来讲,WCF的ServiceMode需要解决的是:
◆如何根据不同的listening URI创建ChannelListener并进行监听;
◆当request抵达,如何创建适合的Channel接收request message;
◆如何将Message分发到对应的Endpoint进行处理;
◆如何进一步将Message分发到对应的service instance;
◆以及如何进一步地分发的具体的service instance的匹配的method call。

由于“分发(Dispatch)”是其根本的功能和任务,所以Dispatcher是整个Service端ServiceMode的核心。正如标题所述,WCF Dispatcher是整个WCF service mode layer的中枢,本篇文章讲着重围绕着WCF Dispatcher来展开介绍。

WCF Dispatcher并不是指的某一个对象,而是指完成整个dispatch功能的一组相关对象的总称。这包括3个核心的对象:ChannelListener、ChannelDispatcher和EndpointDispatcher,和一些辅助的对象。

#T#ChannelListener 在本系列的前面两个部分已经进行了详细的介绍,我们知道其主要功能在于:绑定到一个固定的Listening URI,监听来自外界的请求。一旦请求抵达,创建对应的Channel接收Request message。但是我们的业务逻辑定义在一个个的service类中,所以WCF必须提供一种机制通过我们接收到的message去激活对应service instance并调用对应的方法。

对于的激活(Activation)包含两种:创建一个新的service instance(PerCall instancing mode)和复用一个已经存在的service Instance(PerSession 和Singleton instancing mode)。ChannelDispatcher的核心功能就是提供了这样一种功能(尽管它还提供了其他的有用的功能,为了是内容不至于太散,在这里就不再作相关的介绍)。

ChannelDispatcher通常和一个ChannelListener关联,而ChannelListener又对应着一个固定的listening URI。对于一个被host的service来讲,可能定义了不同的listening address,所以一个service一般对应着一到多个ChannelDispatcher。更进一步说,当我们host一个service的时候,WCF会为之创建一个ServiceHostBase对象(ServiceHost或者是你自定义的继承自ServiceHostBase的对象),所以一个ServiceHostBase对象对应一到多个ChannelDispatcher对象。

对于接收到的request message,ChannelDispatcher不会自己对其进行处理,而是将其分发到与之相匹配为的EndpointDispatcher上,所以处理message的的绝大部分功能实际上是由EndpointDispatcher来实现的。对于同一个listening address,我们一般会不止一个endpoint,所以一个ChannelDispatcher拥有不止一个EndpointDispatcher。对于EndpointDispatcher来讲,有一个绝对绝对值得特别介绍的是DispatchRumtime。

DispatchRumtime和一个特定的EndpointDispatcher匹配,通过定制DispatchRumtime,你可以很容易地按照你具体的需要改变整个service或者某个具体的Operation相关的运行时行为。对于WCF一门重要的课题, WCF extensions来讲,你的绝大部分BehaviorExtesionElment,都是通过具体的Behavior对DispatchRumtime进行定制而实现的。

责任编辑:田树 来源: 博客
相关推荐

2009-11-09 13:56:15

WCF Stream对

2009-11-05 14:40:08

WCF KnownTy

2009-11-06 09:22:46

WCF应用

2009-11-05 10:37:58

WCF Address

2009-11-05 15:00:26

WCF Stream

2009-11-05 13:21:41

WCF架构

2009-11-05 13:54:07

WCF Service

2009-12-08 18:31:58

WCF WEB

2009-06-12 14:32:53

WCFJSON对象jQuery

2009-11-06 16:35:56

WCF Stream对

2009-11-05 17:00:34

WCF有序传递

2009-11-05 08:46:10

WCF与ExtJs

2009-11-05 16:01:51

WCF单调服务

2009-11-05 16:21:51

WCF服务

2009-12-07 17:37:40

WCF数据

2010-02-26 15:24:27

WCF释放服务对象

2009-11-05 14:47:35

WCF Stream对

2010-02-22 13:28:05

WCF异步调用

2010-02-22 17:51:46

WCF传较大数据

2009-12-21 14:37:14

点赞
收藏

51CTO技术栈公众号