CN103793227A - 一种实现wcf服务的方法 - Google Patents

一种实现wcf服务的方法 Download PDF

Info

Publication number
CN103793227A
CN103793227A CN201410031363.1A CN201410031363A CN103793227A CN 103793227 A CN103793227 A CN 103793227A CN 201410031363 A CN201410031363 A CN 201410031363A CN 103793227 A CN103793227 A CN 103793227A
Authority
CN
China
Prior art keywords
service
wcf
interface
contract
portable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410031363.1A
Other languages
English (en)
Other versions
CN103793227B (zh
Inventor
赵启杰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Group Shandong General Software Co Ltd
Original Assignee
Inspur Group Shandong General Software Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Inspur Group Shandong General Software Co Ltd filed Critical Inspur Group Shandong General Software Co Ltd
Priority to CN201410031363.1A priority Critical patent/CN103793227B/zh
Publication of CN103793227A publication Critical patent/CN103793227A/zh
Application granted granted Critical
Publication of CN103793227B publication Critical patent/CN103793227B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Computer And Data Communications (AREA)

Abstract

本发明公开了一种实现WCF服务的方法,属于数据通信技术领域。该方法利用.NET的动态类型创建机制,动态生成代理类型,通过代理类型实现WCF支持的各种服务。与现有技术相比,本发明的实现WCF服务的方法对业务组件代码“零侵入”,可以大大提高业务组件的复用能力,具有很好的推广应用价值。

Description

一种实现WCF服务的方法
技术领域
本发明涉及一种数据通信技术领域,具体地说是一种实现WCF服务的方法。
背景技术
Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口。
WCF是.NET框架的一部分,由 .NET Framework3.0 开始引入。在 .NET Framework2.0 以及前版本中,微软发展了 Web Service (SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基础的 Winsock 等通信支持。由于各个通信方法的设计方法不同,而且彼此之间也有相互的重叠性(例如 .NET Remoting 可以开发 SOAP, HTTP 通信),对于开发人员来说,不同的选择会有不同的程序设计模型,而且必须要重新学习。同时,面向服务架构(Service-Oriented Architecture) 也开始盛行于软件工业中,因此微软重新查看了这些通信方法,并设计了一个统一的程序开发模型,对于数据通信提供了最基本最有弹性的支持,这就是 Windows Communication Foundation。
WCF实际上是构建了一个框架,这个框架实现了在互联系统中各个Application之间如何通信。使得开发人员和架构师在构建分布式系统中,无需在考虑如何去实现通信相关的问题,更加关注于系统的业务逻辑本身。而在WCF Infrastructure中,各个Application之间的通信是由Endpoint来实现的。Endpoint包含以下4个对象:
Address: Address通过一个URI唯一地标识一个Endpoint,并告诉潜在的WCF service的调用者如何找到这个Endpoint。所以Address解决了Where to locate the WCF Service?
Binding: 一个Binding包含着丰富的信息,每种信息都描述了服务端和客户端交互过程中的一方面,
层次 备注说明
Transactions(事务) TransactionFlowBindingElement,用于指定事务流程
Reliability(信赖) ReliableSessionBindingElement,用于指定对会话方式
Security(安全) SecurityBindingElement,指定安全方式
Encoding(编码) Text, Binary, MTOM, Custom,指定数据传输格式
Transport(传输) TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom,指定传输方式
如上表所示,Binding描述了这些层面的信息。
WCF 的基本概念是以契约(Contract) 来定义双方沟通的协议,契约必须要以接口的方式来体现,而实际的服务代码必须要由这些契约接口派生并实现。契约分成了四种:数据契约(Data Contract),订定双方沟通时的数据格式;服务契约(Service Contract),订定服务的定义;操作契约(Operation Contract),订定服务提供的方法;消息契约(Message Contract),订定在通信期间改写消息内容的规范。
 Behavior: Behavior的主要作用是定制Endpoint在运行时的一些必要的Behavior。比如Service 回调Client的Timeout;Client采用的Credential type;以及是否支持Transaction等。
WCF 由于集合了几乎由.NET Framework 所提供的通信方法,因此学习曲线比较陡峭,开发人员必须要针对各个部份的内涵做深入的了解,才能够操控 WCF 来开发应用程序。除此之外,随着版本的演进,WCF对最新技术的支持方式也在不断修正和改进。譬如:从.NET4才提供WebScriptServiceHost,用来简化支持Ajax调用的Web服务的开发;
Figure 894722DEST_PATH_IMAGE001
而在.NET4之前,可能需要采用上表中在实现类上标记AspNetCompatibilityRequirements属性的方式开发兼容Ajax调用的Web服务。
由前面对WCF基础框架的分析可见,开发人员无法只关注系统的业务逻辑本身,还是必须要关注很多技术细节,还要随着WCF的不断演进,有可能随时调整自己的代码,重新编译,发布业务组件的新版本。这带来了巨大的重复工作量,影响了软件系统的开发效率和系统稳定性。
下面以一个简单的WCF例子说明WCF开发的基本模式。
第一步 定义契约接口
Figure 794545DEST_PATH_IMAGE002
如上表引用WCF的名字空间System.ServiceModel,并在接口上注明[ServiceContract]。
第二步 实现服务
Figure 298338DEST_PATH_IMAGE003
如上表代码所示,写一个实现了契约的C#类。
第三步 配置ServiceHost
Figure 600007DEST_PATH_IMAGE004
配置方法如上表所示。
由上述步骤可以很明显的感受到即使一个最简单的HelloWorld程序也需要开发人员了解WCF的很多知识点,并且开发人员的业务代码被WCF的属性标记“污染”。
发明内容
本发明的技术任务是针对上述现有技术的不足,提供一种实现WCF服务的方法。利用这种方法,开发人员完全不用了解WCF的技术细节,就可以把自己的业务代码发布为“服务”,开发人员编写的业务代码完全不依赖WCF运行时。
本发明的技术任务是按以下方式实现的:一种实现WCF服务的方法,其特点是利用.NET的动态类型创建机制,动态生成代理类型,通过代理类型实现WCF支持的各种服务。
动态生成代理类型的创建基于规则匹配,特定业务组件增加代理类型的特定属性标记,以实现WCF服务的特殊控制。
上述方法具体包括以下步骤:
(一)实现一个SOA服务框架:Portable Service,包含业务逻辑代码的简单.NET对象通过Portable Service发布为服务;
(二)当服务被初次调用时,Portable Service根据配置自动查找服务对应的简单.NET对象,并根据约定查找简单.NET对象实现的接口,把查找到的接口作为模板,动态创建一个WCF契约接口;
(三)Portable Service把上步骤(二)的简单.NET对象作为父类,自动创建一个实现了契约接口的服务反向代理类,所述服务反向代理类对服务契约的实现完全调用父类的业务逻辑代码;
(四)Portable Service创建WCF的ServiceHost,并使用动态创建的WCF契约接口和服务反向代理类来装配WCF的EndPoint,建立了EndPoint后,即可对外提供服务。
通过简单接口调用WCF服务:根据简单接口创建WCF契约接口,通过契约接口类型创建调用管道,然后再使用接口代理合并技术,把契约接口和简单接口合并到一个代理对象中。
上述方法实现过程如下:首先,实现一个轻量级的SOA服务框架:Portable Service。Portable Service 是一个通讯服务框架,是一个服务容器。包含业务逻辑代码的“简单.NET对象”(即PONO,.NET借鉴Java中POJO术语,用PONO表示简单业务逻辑对象)通过Portable Service可以发布为服务。通过Portable Service发布的服务完全符合WCF技术规范。当服务被初次调用时,Portable Service会根据配置自动查找“服务”对应的“简单.NET对象”,并根据约定查找“简单.NET对象”实现的接口,把查找到的接口作为模板,动态创建一个WCF契约接口。接下来,Portable Service把上一步的“简单.NET对象”作为父类,自动创建一个实现了契约接口的类。这个派生的类,我们称之为“服务反向代理类”。“服务反向代理类”对服务契约的实现完全调用父类的业务逻辑代码。Portable Service然后创建WCF的ServiceHost,并使用动态创建的契约接口和“服务反向代理类”来装配WCF的EndPoint。建立了EndPoint后,就可以对外提供“服务”了。服务发布后,客户端就可以像调用普通的WCF服务一样去调用它。Portable Service还提供了一个调用服务的透明“管道”,使用这个管道,开发人员的代码就不需要依赖WCF的类库。
本发明的实现WCF服务的方法与现有技术相比具有以下突出的有益效果:
(一)                  对业务组件代码“零侵入”,一套业务组件就可以通过本方法支持多种服务架构,大大提高业务组件的复用能力;
(二)                  有别于常见的弱类型反射调用方式,该方法完全支持强类型参数;
(三)                  开发人员的代码不需要依赖WCF的类库,可以使用简单对象接口调用WCF服务。
 
附图说明
附图1是本发明方法的Portable Service动态类型技术原理图。
具体实施方式
参照说明书附图以具体实施例对本发明的实现WCF服务的方法作以下详细地说明。
实施例:
如附图1所示,本发明的实现WCF服务的方法利用.NET的动态类型创建机制,动态生成代理类型,通过代理类型实现WCF支持的各种服务。
其实现方案包含三部分:1) 动态类型创建器  2) 服务宿主工厂(PortableServiceHostFactory)  3)动态服务调用管道
1、动态类型创建器
动态类型创建器是一个工具类,它利用ILGenerator和TypeBuilder在内存中动态创建“服务反向代理类”,
Figure 960581DEST_PATH_IMAGE005
 创建的过程如上述伪代码所示。
动态类型创建器在内存中创建一个模块,接着配置TypeBuilder,然后调用typeBuilder.CreateType()创建代理类。
Figure 347700DEST_PATH_IMAGE006
配置TypeBuilder的关键步骤是为类型标记上WCF的契约属性,从而创建出符合WCF契约规范的类型,如上表所示。
除标注WCF契约必须的属性外,Portable Service还支持根据配置标注扩展的属性。Portable Service内部实现了一个以容器“Box”为单位的匹配机制。可以把属性标记动态标注在类或者方法上。
Figure 655185DEST_PATH_IMAGE007
如上表所示,在“规则盒”PortableSvcBox.Ajax中登记了webinvoke和ajaxAttribute两个动态属性。符合规则ruleAjax 的类型的反响代理类会被标注上ajaxAttribute所描述的属性。
有了这条动态标注属性的规则,就可以精细化控制“服务反向代理类”的创建,以满足特定的需求场景。
2、服务宿主工厂(PortableServiceHostFactory)
Figure 545780DEST_PATH_IMAGE008
服务宿主工厂(PortableServiceHostFactory)负责服务的初始。业务组件在Portable Service中部署发布后,初次调用服务时,PortableServiceHostFactory派生自ServiceHostFactory,重写CreateServiceHost方法,调用 PortableServiceTypeResolver的ResolveType方法得到“服务反向代理类”的类型实例,如上表所示。
3、动态服务调用管道
Portable Service发布的服务兼容标准WCF服务,客户端可以采用标准的WCF服务调用方式。但是这种方式需要显式引用WCF的运行时。Portable Service还提供了一种更为简单的方式:动态服务调用管道。动态管道的使用方式与WCF的管道非常相似。区别在于WCF管道必须使用WCF契约接口初始化,而动态管道使用简单接口即可。
Portable Service中的工具类PortableChannelFactoryHelper创建动态调用管道。PortableChannelFactoryHelper的基本原理是根据简单接口为模板动态生成一个临时的WCF契约,但这个契约接口与模板接口没有派生关系,只是接口名称和方法签名一致。内部实现了一个“自定义管道工厂 ”。“自定义管道工厂 ”可以使用临时生成的WCF契约创建一个通信管道。这个通信管道与模板接口没有直接关系,所以还必须创建一个实现了模板接口和临时契约接口的“管道代理器”,这样就可以使用简单对象接口调用管道的服务了,
关键伪代码如上表。
下面以某HR系统用于员工查询的业务组件为例,详细描述本发明方法的实现过程。
开发人员首先定义组件接口IHRBizObject
Figure 951671DEST_PATH_IMAGE010
定义方法如上表所示。
开发人员实现该业务组件
Figure 62846DEST_PATH_IMAGE011
实现方法如上表所示。
开发人员完成上述代码后,就完成了编码工作。很明显,开发人员完全不用了解WCF的任何知识。
然后开发人员只需编写一个文本文件,扩展名为svc。把文件放到Portable Service的WCF服务目录下即可的,
Figure 73528DEST_PATH_IMAGE012
文本文件内容如上表所示。
做完上述三步后,服务端的编码就全部完成了,开发人员没有接触WCF的任何知识。接下来是客户端使用Portable Service的步骤,
Figure 41484DEST_PATH_IMAGE013
客户端的代码如上表所示。
从本例看,可以确定从服务端到客户端,Portable Service都对WCF进行了透明封装,使开发人员的代码与WCF运行时框架完全解耦。开发人员可以只关注业务逻辑的实现了。

Claims (4)

1.一种实现WCF服务的方法,其特征在于:利用.NET的动态类型创建机制,动态生成代理类型,通过代理类型实现WCF支持的各种服务。
2.根据权利要求1所述的实现WCF服务的方法,其特征在于,动态生成代理类型的创建基于规则匹配,特定业务组件增加代理类型的特定属性标记,以实现WCF服务的特殊控制。
3.根据权利要求2所述的实现WCF服务的方法,其特征在于,包括以下步骤:
(一)实现一个SOA服务框架:Portable Service,包含业务逻辑代码的简单.NET对象通过Portable Service发布为服务;
(二)当服务被初次调用时,Portable Service根据配置自动查找服务对应的简单.NET对象,并根据约定查找简单.NET对象实现的接口,把查找到的接口作为模板,动态创建一个WCF契约接口;
(三)Portable Service把上步骤(二)的简单.NET对象作为父类,自动创建一个实现了契约接口的服务反向代理类,所述服务反向代理类对服务契约的实现完全调用父类的业务逻辑代码;
(四)Portable Service创建WCF的ServiceHost,并使用动态创建的WCF契约接口和服务反向代理类来装配WCF的EndPoint,建立了EndPoint后,即可对外提供服务。
4.根据权利要求1所述的实现WCF服务的方法,其特征在于,通过简单接口调用WCF服务:根据简单接口创建WCF契约接口,通过契约接口类型创建调用管道,然后再使用接口代理合并技术,把契约接口和简单接口合并到一个代理对象中。
CN201410031363.1A 2014-01-23 2014-01-23 一种实现wcf服务的方法 Active CN103793227B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410031363.1A CN103793227B (zh) 2014-01-23 2014-01-23 一种实现wcf服务的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410031363.1A CN103793227B (zh) 2014-01-23 2014-01-23 一种实现wcf服务的方法

Publications (2)

Publication Number Publication Date
CN103793227A true CN103793227A (zh) 2014-05-14
CN103793227B CN103793227B (zh) 2018-03-13

Family

ID=50668944

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410031363.1A Active CN103793227B (zh) 2014-01-23 2014-01-23 一种实现wcf服务的方法

Country Status (1)

Country Link
CN (1) CN103793227B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104486382A (zh) * 2014-11-27 2015-04-01 珠海格力电器股份有限公司 一种wcf双工通信服务的创建方法及系统
CN108494606A (zh) * 2018-04-19 2018-09-04 四川师范大学 一种基于wcf技术的数据服务框架搭建方法
CN108965375A (zh) * 2018-05-21 2018-12-07 阿里巴巴集团控股有限公司 服务调用代理控制系统、方法、服务器及可读存储介质
CN115914232A (zh) * 2022-12-14 2023-04-04 四川师范大学 一种不动产数据混合存储服务建立方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101551742A (zh) * 2008-03-31 2009-10-07 上海宝信软件股份有限公司 辅助构建面向服务应用系统的向导组件
CN101847100A (zh) * 2010-06-08 2010-09-29 用友软件股份有限公司 扩展软件应用的方法和装置
CN102750145A (zh) * 2012-06-05 2012-10-24 怯肇乾 一种网络系统软件体系框架及其实现方法
CN102789382A (zh) * 2012-06-28 2012-11-21 用友软件股份有限公司 用于表单生成和运行的系统及方法
US20130073994A1 (en) * 2011-09-19 2013-03-21 Microsoft Corporation Web-based workflow service visualization and navigation

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101551742A (zh) * 2008-03-31 2009-10-07 上海宝信软件股份有限公司 辅助构建面向服务应用系统的向导组件
CN101847100A (zh) * 2010-06-08 2010-09-29 用友软件股份有限公司 扩展软件应用的方法和装置
US20130073994A1 (en) * 2011-09-19 2013-03-21 Microsoft Corporation Web-based workflow service visualization and navigation
CN102750145A (zh) * 2012-06-05 2012-10-24 怯肇乾 一种网络系统软件体系框架及其实现方法
CN102789382A (zh) * 2012-06-28 2012-11-21 用友软件股份有限公司 用于表单生成和运行的系统及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
LARSW: "Mocking a Wcf ServiceContract", 《HTTPS://STACKOVERFLOW.COM/QUESTIONS/2855535/MOCKING­A­WCF­SERVICECONTRACT》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104486382A (zh) * 2014-11-27 2015-04-01 珠海格力电器股份有限公司 一种wcf双工通信服务的创建方法及系统
CN104486382B (zh) * 2014-11-27 2017-09-22 珠海格力电器股份有限公司 一种wcf双工通信服务的创建方法及系统
CN108494606A (zh) * 2018-04-19 2018-09-04 四川师范大学 一种基于wcf技术的数据服务框架搭建方法
CN108494606B (zh) * 2018-04-19 2020-12-15 四川师范大学 一种基于wcf技术的数据服务框架搭建方法
CN108965375A (zh) * 2018-05-21 2018-12-07 阿里巴巴集团控股有限公司 服务调用代理控制系统、方法、服务器及可读存储介质
CN108965375B (zh) * 2018-05-21 2021-04-20 创新先进技术有限公司 服务调用代理控制系统、方法、服务器及可读存储介质
CN115914232A (zh) * 2022-12-14 2023-04-04 四川师范大学 一种不动产数据混合存储服务建立方法

Also Published As

Publication number Publication date
CN103793227B (zh) 2018-03-13

Similar Documents

Publication Publication Date Title
CN101593111B (zh) 一种业务组件及基于业务组件的应用软件开发方法和系统
US20220035604A1 (en) Computing Expression Medium, Development Environment, and Device Communication and Control Architecture
CN102375731B (zh) 一种免编码集成应用软件平台系统
CN101221556B (zh) 一种xml文件解析的方法及装置
CN103383645A (zh) 代码生成方法及系统
US11531914B2 (en) Artificial intelligence (AI) based automatic rule generation
CN105278946B (zh) 一种RESTful API可视化方法
AU2002319843A1 (en) General and reusable components for defining net-centric application program architectures
WO2002093364A2 (en) General and reusable components for defining net-centric application program architectures
CN105512304A (zh) 在线生成互联网应用方法和系统集成方法及支撑平台
CN104679511A (zh) 基于MDE模型转换的MapReduce代码生成方法
CN101976199A (zh) 面向对象的中间件分布式系统开发平台
CN103793227A (zh) 一种实现wcf服务的方法
CN104615489A (zh) 一种多节点数据交互的实现方法
CN112269836A (zh) 一种区块链智能合约生成与管理系统及其实现机制
CN105204863A (zh) 违法数据审核系统技术文档
CN110851123A (zh) 基于SpringMVC的WebGIS电网可视化框架的构建方法、系统及装置
CN106372152B (zh) 一种在线表单开发系统
CN103699746B (zh) 基于数据库的cadds5管系三维设计方法及系统
CN101237449B (zh) 一种访问ims数据库的方法及系统
CN103257855B (zh) 一种基于mvc的处理系统、处理方法及在美容软件中的应用
Kim Design pattern based model transformation with tool support
CN103870280A (zh) 基于flex与jsp的网页无缝结合处理方法
Rademacher et al. Towards Holistic Modeling of Microservice Architectures Using LEMMA.
CN106844156B (zh) 智能建筑综合管理平台系统中wcf通信消息拦截方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information
CB02 Change of applicant information

Address after: 250100 Ji'nan high tech Zone, Shandong, No. 1036 wave road

Applicant after: Langchao General Software Co., Ltd

Address before: 250101 Shandong Province, Ji'nan City hi tech Development Zone, Nga Road No. 1036

Applicant before: Shandong Universal Software Co., Ltd., Langchao Group Corp.

GR01 Patent grant
GR01 Patent grant