WCF在设计的时候,就封装了对常用协议如Tcp\HTTP\MSMQ的处理机制。但WCF同时也允许开发者在WCF现有
平台上进行扩展,以解决实际问题。
大部分情况下,通过WCF常用的协议,就已经能完成了大部分工作了。在WCF揭秘中,作者在介绍如何扩展
WCF时,讲了一些WCF是如何处理行为、信道、传输等方面的工作机制。本节从WCF行为作为切入点,谈谈个人
对WCF体系的理解。
在WCF框架设计时,为了简化WCF普通的应用场景,也为了满足一些特殊环境下的应用,WCF的设计者们将
WCF进行分成设计。实现方式是将上层 与底层应用区分开。
在一些特殊环境下对底层做一些扩展就行了。WCF将一般场景使用的的上层应用类型都放在System.ServiceModel
中。而对底层的扩展主要针对的类型放在System.ServiceModel.Dispatcher与System.ServiceModel.Channels
这两个命名空间中。本节介绍的消息在Client与Server中大致处理流程
WCF客户端与服务端交互过程是怎样的呢。?首先看下图:
过程说明:
1、Client发起服务调用,客户端操作组件对调用参数进行检查,并序列化到System.ServiceModel.Channels.Message对象中。
2、客户端运行时组件通过IMessageInspectors对消息进行检查并将请求信息通过Channel发往Server
3、Service Endpoint的调度器(Dispatcher)从信道层中获取请求消息交给信道调度器
4、信道调度器然后将消息交给终结点调度器。
5、根据消息地址,操作调度器决定消息与服务契约定义的操作匹配
6、调用操作器将参数传递给实现该接口的操作并进行调用。
7、如果调用有返回,则响应消息被传递给信道调用器,由信道调用器将响应信息放入信道中,回复给客户端
在这个过程中,还有一些具体的问题,如在WCF服务端,调度器(Dispatcher)如何工作?
下面分服务端、客户端分别介绍
服务端:调度器(Dispatcher)。
调度器负责从信道中获取数据,并传递给终结点相应的方法以进行处理。在这个过程中涉及到的调度器(Dispatcher)有三种:信道调度器(Channel Dispather)、终结点调度器(Endpoint Dispatcher)、操作调度器(Opeartion Dispatcher)。
过程说明:
1、信道调度器从信道中获取数据,并根据读取到的消息的地址决定将消息发送给哪个终结点。
2、终结点调度器根据消息的Action,决定消息所对应的接口操作。然后将消息发送给操作调度器。
3、操作调度器接收到消息以后,对它进行反序列化以获取接口需要的参数,并将参数传递给方法。处理完成以后,还将对响
应消息进行序列化。
调度器(Dispatcher)由三种类型进行定义:ChannelDispatcher、DispatcherRuntime、DispatcherOperation。
ChannelDispatcher定义了服务层的信道调度器。
DispatcherRuntime代表终结点调度器层的组件。
DispatcherOperation代表操作相关的调度器组件。
客户端:
在WCF的客户端,客户端运行时组件主要由两类定义:1、System.ServiceModel.Dispatcher.ClientOperation、
2、System.ServiceModel.Dispatcher.ClientRuntime。
1、ClientOperation类
它有两个重要的属性来附加相关的行为:
1、参数检查器:ParameterInspectors。在ClientOperation中的定义:
public
SynchronizedCollection<IParameterInspector> ParameterInspectors {
get
; }
public
interface
IParameterInspector
{
// Methods
void
AfterCall(
string
operationName,
object
[] outputs,
object
returnValue,
object
correlationState);
object
BeforeCall(
string
operationName,
object
[] inputs);
}
|
2、附加定制行为的属性:Formatter:负责将发送的数据序列化到消息里,也就是System.ServiceModel.Channles.Message对象的Body中。在ClientOperation中的定义:
public
IClientMessageFormatter Formatter {
get
;
set
; }
public
interface
IClientMessageFormatter
{
// Methods
object
DeserializeReply(Message message,
object
[] parameters);
Message SerializeRequest(MessageVersion messageVersion,
object
[] parameters);
}
|
2、ClientRuntime类也有两个属性来附加终结点的行为:
1、OperationSelector:它通过Client调用的哪个方法决定进行哪个方法的调用。在ClientRuntime中的定义:
public
IClientOperationSelector OperationSelector {
get
;
set
; }
public
interface
IClientOperationSelector
{
// Methods
string
SelectOperation(MethodBase method,
object
[] parameters);
// Properties
bool
AreParametersRequiredForSelection {
get
; }
}
|
2、MessageInspector:它用于检查并有选择性的修改发送的请求消息和接收到的响应消息。在ClientRuntime中的定义:
public
SynchronizedCollection<IClientMessageInspector> MessageInspectors {
get
; }
public
interface
IClientMessageInspector
{
// Methods
void
AfterReceiveReply(
ref
Message reply,
object
correlationState);
object
BeforeSendRequest(
ref
Message request, IClientChannel channel);
}
WCF
WCF体系架构(之一:Client与Server信息交互处理流程初略介绍)
摘要: WCF在设计的时候,就封装了对常用协议如Tcp\HTTP\MSMQ的处理机制。但WCF同时也允许开发者在WCF现有平台上进行扩展,以解决实际问题。 大部分情况下,通过WCF常用的协议,就已经能完成了大部分工作了。在WCF揭秘中,作者在介绍如何扩展WCF时,讲了一些WCF是如何处理行为、信道、传输等方面的工作机制。本节从WCF行为作为切入点,谈谈个人对WCF体系的理解。 在WCF框架设计时,为了简化WCF普通的应用场景,也为了满足一些特殊环境下的应用,WCF的设计者们将WCF进行分成设计。实现方式是将上层 与底层应用区分开。在一些特殊环境下对底层做一些扩展就行了。WCF将一般场景使用的的...
阅读全文
SOAP消息机制简介
摘要: SOAP(Simple Object Access Protocol,简单对象访问协议)作为一种信息交互协议在分布式应用中非常广泛,如WebService。在使用.Net开发WebService时候,只需要在对应的方法上加上WebMethod特性然后就可以通过网络进行SOAP消息的发送。这样在平时使用Webservice时,可能不太关心SOAP消息的结构到底是怎样的。下面大致说说SOAP消息的结构,以及使用工具监听SOAP消息报文。本节目录:1、XSD是什么2、基于SOAP的数据交互系统是XSD的3、SOAPSOAP消息结构4、支持SOAP的协议5、通过SOAPHeader扩展SOAP6、..
阅读全文
REST笔记(四):Atom发布协议------ AtomPub
摘要: 前一节介绍了一种IETF推荐的一种超媒体格式------Atom,这一节中主要Atom发布协议-------Atom Publish Protocol,简称AtomPub,有时更简洁写作APP。 开篇之前介绍几个重要概念先: 1、媒体类型 描述相关资源表述所使用的类型,如XML、JSON、JPG、MP3等、处理模型以及链接关系值 2、HTTP惯用语 它规范了如何对资源进行操作以及处理HTTP头信息和状态码 3、领域应用协议。 领域应用协议(Domain Application Protocol DAP),它为服务端与客户单的资源的交互定义了一套规范,如资源的媒体类型、链接关系...
阅读全文
Jquery+JSON消费REST WCF4.0 服务(带源码)
摘要: 作为一种以HTTP协议为基础的WCF 服务,只要客户端能模拟进行HTTP请求,都能成为服务的消费者。之前写过《对Jquery+JSON+WebService的一点认识》,觉得在REST是基于HTTP协议的,AJAX的操作也应该一样。但是事实上还是有些差别的。由于网上资源聊聊无几,因此记录下自己的个人体会。希望对你有些帮助! 本篇主要讲述的类容为在ASP.NET中,如何通过AJAX来消费REST服务。 使用JQUERY框架模拟AJAX请求时,操作类型主要有GET、POST两种。本节也以这两种常用的方式来进行介绍。(type (String) : (默认: "GET") 请求方
阅读全文
在REST WCF中使用HTTP Header进行数据交互
摘要: 我们知道,在HTTP协议的报文头Header中存放着许多信息。如果你读过老A的《通过添加HTTP Header实现上下文数据在WCF的自动传递》,那你一定知道如何通过底层的扩展来实现如何在REST WCF中使用HTTP Header来进行数据交互。这对于大家更多的了解WCF的底层机制有很大的帮助作用。 窃以为:在实际的REST WC应用中,想通过Header头来实现数据交互不用那么麻烦。MicroSoft在它所提供的库中就已经为我们封装好了一些接口,可以很容易的让我们实现这一功能。 HTTP Header报文头可以在Server与Client之间传递很多数据。我们可以获取这些数据然后进...
阅读全文
REST WCF 使用Stream进行Server与Client交互
摘要: 上节介绍了REST WCF 4.0相比3.5支持更多的交互格式,本篇就说说在Server与Client间通过最原始的流的格式进行通讯。开篇之前,介绍REST WCF 的一个特性:DescriptionAttribute。对这个特性相信都很熟悉,它的作用如同在WebService中通过它来标注出某个接口的描述信息,在REST WCF中同样如此。将它标注在REST WCF 接口中后,在help页面中将会显示接口的描述信息。 如以往,本篇将通过Demo的形式介绍如何在REST WCF中使用Stream。Demo的功能有以下几点: 1、通过Stream的形式获取服务端的图片资源,并保存到本地 ...
阅读全文
REST WCF 4.0 新特性简介
摘要: 前面几节介绍了REST WCF 3.5的一些基本特性以及使用方式,在WCF4.0的时代,也做了对REST的支持。相比3.5时代,4.0改进体现有如下几点:增加对路由的支持对缓存的支持。帮助(help)页面的改进。消息错误处理消息格式的多样性如(XML\JSON\ATOM\TEXT\BINARY)简化操作。 本节讲述的重点为如何使用路由注册REST服务、缓存以及help页面 1、使用路由注册服务。 WCF4.0中新增的路由服务可以帮助直接注册服务,而不再需要SVC的文件。 需要注意的是,使用路由注册服务时必须启动ASP.NET的兼容模式。即设置aspNetCompatibilityE...
阅读全文
.Net Remoting与WCF实现Server与Client通讯比较
摘要: .Net Remoting是微软早前推出的一项分布式通讯技术框架,在.Net架构的程序中有着比较广泛的应用。在WCF中,已经集成了Remoting的技术。不过,他们有着很多相同的概念,如:信道(Channel)、代理(Proxy)、寄宿(host)等。在如今仍有一些分布式系统应用中运行着由Remoting技术构建的系统。本文将描述在服务端与客户端的交互中,他们各自的实现方式。 1、Remoting的实现。 在Remoting中,远程对象是一个重要的概念。服务端通过将它注册到制定的信道中,客户端服务...
阅读全文
对REST架构 风格下WCF的一点补充
摘要: 这几天思考REST 架构下POST复杂数据类型的问题查了写资料,以及通过与WCF 大牛------Frank Xulei进行了一番交流对REST有了一些进一步的认识。本篇作为:1、REST与SOA两种架构下WCF的异同比较 2、通过HTTP协议标准动作使用REST WCF 服务这两篇的一个补充。 起因是这样的:在SOA架构下,一般都是通过定义服务契约的方式最终通过WSDL将元数据对外发布,以供调用者使用。也就是说在SOA中,通过服务契约定义向外公布服务对外提供的操作。如果先学习SOA,然后接触REST,可能会在使用REST的时候会沿用SOA下的一些习惯。我在进行REST架构下的WCF学...
阅读全文
通过Fiddler测试你的 REST WCF服务
摘要: Fiddler是一款强大的软件,在实际的开发中它能帮助我们跟踪HTTP请求,记录发送请求和获取到请求结果的数据。使用VS2008的时候,一直是用IE6浏览调试,使用Fiddler也正常。但本人一直习惯用FireFox,可怜用它访问的时Fiddler却不能帮助记录下数据(FireFox版本:4.0)。还以为Fiddle只能在IE下使用,试了试chrome,发现也可以用。言归正卷,本篇针对上篇中的REST服务(具体例子以及带代码采用上节中介绍的:通过HTTP协议标准动作使用REST WCF 服务)使用Fiddler简要做一个介绍。首先大致说说Fiddler的界面,如图: ...
阅读全文
通过HTTP协议标准动作消费REST WCF 服务
摘要: 前几节介绍了REST WCF 服务的一些基本的特点,本节说明一下,如何基于HTTP的标准动作来使用REST WCF 服务。由于RESTful服务的架构风格基于HTTP协议,并且其设计原则中明确指出:通过通用的连接器接口来使用资源。对于REST架构风格的服务,主要通过它8个动作中的4个来使用资源,即:GET,POST,PUT,DELETE。 在RESTful 服务中,GET,POST,PUT,DELETE的标准操作如下: GET:获取资源 POST:修改资源 PUT:创建资源 DELETE:删除资源本节涉及的要点如下:1、如何定义接口规范,使客户端通过能通过HTTP协议的标准动作来...
阅读全文
REST下的WCF的寄宿方式
摘要: 如同SOA下的WCF,REST架构下的WCF也有多种多样的寄宿方式,如IIS寄宿,自寄宿等等,即使它只有一种协议。由于REST基于HTTP协议的特点,所以这种架构下的WCF寄宿时,需要有Web服务器的支持。那么很显然,微软肯定会使用自己的Web服务器IIS了。本节目录:1、IIS寄宿2、控制台程序寄宿(暂且将它称为自寄宿)当然,REST WCF还有其他的寄宿方式,我这里只挑出典型的两种给大家介绍。有兴趣的朋友不妨试试其他的寄宿方式。本节中所使用的实例还是上节所使用的例子。Demo结构图如下:结构说明:Client为服务消费者,Contracts定义服务契约、数据契约,Services定义服..
阅读全文
REST与SOA两种架构下WCF的异同比较(含源码)
摘要: REST(Representational State Transfer)与SOA(Service-Oriented Architecture)作为当今软件架构中主流的两种架构思想在当前开发过程中已经越来越流行。作为微软.NET平台下的下一代通讯技术,WCF也很好的体现了对他们的支持。那么他们到底有哪些差别又有哪些相同之处呢。?本篇将针对这个问题谈谈自己的认识,并通过Demo演示程序。本篇设计的内容如下: 1、REST的特性 2、SOA的特征 3、REST与SOA的共同点 4、REST与SOA的不同点 5、Demo程序说明*REST的特性。首先给出一张图:它基于HTTP协议,是一...
阅读全文
REST 架构风格下的WCF特性简介
摘要: REST(Representational State Transfer)作为一种优秀的架构风格,自诞生以来越来越受广大开发者的青睐。对没有接触过REST的开发人员,可以参阅本人的上一篇博客:对REST架构的理解及Jquery+JSON+RESTful WCF。由于REST推崇的简易型,以及基于HTTP协议的特点,它又有一些什么样的特性呢。?本问将围绕这个主题分两部分展开,并结合Demo程序加以介绍。第一部分介绍涉及到的知识点,第二部分介绍Demo。 主要涉及到的知识点如下: 1、绑定协议与行为(webHttpBinding 与webHttpBehavior) 2、Action的定义...
阅读全文
对REST架构的理解及Jquery+JSON+RESTful WCF (附源码)
摘要: 最近看了一些REST架构风格的介绍,谈谈自己对REST的理解总结一下自己的认识。本文只最为个人阶段性的成果,供对REST开发有兴趣的童鞋参考。若有理解有误的地方恳请大侠指教。 REST看了好多天了,自己也写了一些DEMO程序加深了对他的理解。晚上突然发现还有个微软之前还发布过一个插件名称(WCF REST Starter Kit Preview 2.msi,下载地址:http://aspnet.codeplex.com/releases/view/24644),供给大家使用。供作为个人第一篇介绍REST风格的WCF文章,本文就从这个插件的最基本的使用说起。 本文分为两个部分: 1、R...
阅读全文
|