1 / 16
文档名称:

WCF技术剖析之一:程序模拟WCF基础架构-WCF技巧-WCF教程.doc

格式:doc   大小:420KB   页数:16页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

WCF技术剖析之一:程序模拟WCF基础架构-WCF技巧-WCF教程.doc

上传人:pppccc8 2019/10/26 文件大小:420 KB

下载得到文件列表

WCF技术剖析之一:程序模拟WCF基础架构-WCF技巧-WCF教程.doc

相关文档

文档介绍

文档介绍::..IfWCF技术剖析之一:程序模拟WCF基础架构细算起來,己经有好几个月没有真正的写过文章了。近半年以來,一宜忙于我的第一本WCF专著《WCF技术剖析》的写作,一直无暇管理自己的Blogo到口前为止《WCF技术剖析(卷1)》的写作暂告一段落,初步预计于下个月由武汉博文视点出版。在《WCF技术剖析》写作期间,对WCF乂有了新的感悟,为此以书名开始木人的第三个WCF系列。木系列的目的在于对《WCF技术剖析》的补充,会对书中的一些内容进行展开讲述,同时会囊括很多由于篇幅的原I大I忍痛割弃的内容。本系列的第一篇,我将会对WCF的基本架构作一个大致的讲解。不过,一改传统对WCF的工作流程进行平铺直叙,我将另辟蹊径,作为请求处理平台,通过一个简单的托管程序模拟整个WCF客户端和服务端的架构。SourceCode下载:,为了展示WCF整个处理流程中使用到一些特殊组件。我们首先来简单介绍一下对于一个简单的WCF服务调用,WCF的客户端和服务端框架的处理流程,和该流程的每一个阶段都使用那些重要组件。下而的列表列出了WCF服务端框架对于处理一个简单的WCF服务调用请求所捉供的功能,以及相应的功能承载的组件:•请求消息的接收和回复消息的发送:服务端在传输层监听与接收來自客户的请求,并将经过编码后的回复消息通过传输层发送到客八端•请求消息的解码和回复消息的编码:将接收到的字节数组通过解码生成请求消息对象,并将1叫复消息通过编程转化成字节组。消息的编码和解码通过MessageEncoder完成,而MessageEncoderFactory负责创建该対象•请求消息的反序列化和回复消息的序列化:对请求消息进行反序列化,为服务操作的执行牛:成相应的输入参数,以及将服务操作执行的结果(返回俏或者ref/out参数)序列化,并生成回复消息。序列化和反序列化通过DispatchMcssagcFormattcr完成•服务对象的创建:创建或者激活服务对象实例,InstanceProvider用于服务对象的创建或获取•服务操作的执行:调川创建的服务对象的操作方法,并传入经过反序列化牛成的输入参数。Opcrationlnvokcr完成对服务操作的最终执行较Z服务端的流程,客户端的流程显得相对简单,仅仅包含以下三个必需的阶段:•请求消息的序列化和回复消息的反序列化:生成请求消息并将输入参数序列化到请求消息屮,以及对回复消息进行反序列化,转化成方法调用的返回值或者ref/out参数。序列化和反序列化通过ClienthMessageFormatter完成•请求消息的编码和回复消息的解码:对请求消息进行编码牛成字节数纽供传输层发送,以及将传输层接收到的字节数组解码生成恢复消息。消息的编码和解码通过McssagcEncodcr完成,而McssagcEncodcrFactory负责创建该对象•请求消息的发送和回复消息的接收:在传输层将经过编码的请求消息发送到服务端,以及将接收来自服务端的恢复消息图1精简版WCF客户端与服务端组件图1反映了进行服务调用的必要步骤和使用到的相关WCF组件。在本案例演示中,我们需要做的就是手工创建这些组件,并通过我们自己的代码利用它们搭建一•个简易版的WCF框架。如果读者能够对本案例的实现有一个清晰的理解,相信对于整个WCF的框架就不会感到陌生了。图2显示了本案例解决方案的基本结构,总共分三个项目。Contracts用于定义服务契约,被服务端和客户端引用。客户端通过一个Console应用模拟,Website实现。图2WCF框架模拟案例应用结构步骤一、通过服务契约类型创建相关组件WCF在整个服务调用生命周期的不同阶段,会使用到不同的组件。我们通过一个方法将服务端和客户端所需的所有组件都创建出来,为此,我们在Contracts项目中添加了一个Ut订ity类型,在Create<T>方法中创建所有的组件并通过输出参数的形式返回,泛型类型T表示的是服务契约类型。在该方法小,输出参数encoderFactory被服务端和客户端用于消息的编码和解码,clientFormatters和dispatchFormatters以字典的形式包含了基于服务操作的TCIieniMessageFormatter和TDispatchMessageFormatter,其中clientFormatters和dispatchFormatters的Key分别为操作名称和操作对应的Actiono同样通过字典形式返回的operationinvokers和methods