上学WCF已有近两年的时刻,其间又翻译了Juval的力作《Programming WCF
Services》,我依旧觉得WCF还有越来越多的始末值得商讨与发掘。学得越来越多,反而越来越觉得温馨所知太少,直到现在,我也觉得自己可是是初窥WCF的路线而已。

“学以致用”,倘使一味是指望可以在档次中创制地选取WCF,那么对于程序员而言,可以有三种拔取,一种是“知其可是不知其所以然”,只要精晓了WCF的基础知识,那么对于一般的采用就丰富了。要到位这点就很不难了,微软秉承了永恒的法门,将WCF那门技术优雅地表现给开发者,封装了复杂的落实逻辑,提供了便于调用的类库和相关的工具,使得开发者可以火速地成功WCF程序的费用。别的一种艺术自然就是深浅挖掘WCF的内部贯彻了,这是对WCF专家指出的需求。即使大家要利用WCF达成SOA解决方案,就会遭受重重WCF的尖端应用,怎么样客观、有效地选拔WCF,并按照项目其实意况对WCF进行扩大,就变成了WCF专家必须解决的难点。

故此,若是要读书WCF,你不可能不找准自己上学的心情与对象,然后合理地布局自己的读书进程表,那才是天经地义的上学方法。本文试图对WCF的有些基础概念作一些试探性的阐释与分析,并以问答的艺术社团,希望可以部分解答一些盼望学习WCF,但犹自徘徊在门外的开发者。

1、WCF是什么?

从WCF所处的地方来看,它是含有在.NET 3.0(也包涵.NET
3.5)之中的。大家注意相比较.NET 3.0与.NET 2.0,其实唯一的区分就是.NET
3.0分包了WCF、WPF、WF(或者还有CardSpace)而已。因而,大家以为WCF是.NET框架的一部分,如同并不为过。尤为关键的是,WCF并无法脱离.NET框架而独自存在(但非WCF客户端可以调用WCF服务),由此,尽管WCF是微软用于应对SOA解决方案的付出要求而特意推出的,但它并不是诸如Spring、Struts那样的框架,也不是像EJB那样的容器或者服务器。微软的确适合SOA集团应用服务器角色的,我想应该是Biztalk
Server。

从严的说,WCF就是专程用来服务定制、公布与运行以及音信传递和拍卖的一组专门类的聚合,也就是所谓的“类库”。这么些类经过自然措施被集团起来,共同合营,并为开发者提供了一个联合的编程形式。WCF之所以特殊,是在乎它所应对的光景与普通的.NET类库差距,它至关主要用以拍卖进度间乃至于机器之间新闻的传递与处理,同时它引入了SOA的设计思想,以劳动的艺术公布并运行,以有利于客户端跨进度和机器对服务开展调用。实际上,WCF就是微软对此分布式处理的编程技术的集大成者,它将DCOM、Remoting、Web
Service、WSE、MSMQ集成在一道,从而下落了分布式系统开发者的就学曲线,并联合了付出规范。

WCF与其余类库还有差其余地点,则在于WCF充裕地反映了运转时环境的定义。对于前期采纳WCF的开发人士而言,就可能清楚若是在.NET
2.0下要支付WCF,还索要越发下载一个Runtime Component
3.0版,其中就含有了WCF、WF等内容。在.NET中平素存在所谓“宿主”的概念,整个.NET
Framework(或者说是CLR)就可以认为是一个大的宿主,似乎Java的虚拟机一样。由于WCF对劳动具有特其余急需,对于服务端,要求揭发和周转服务;对于客户端,则必要调用服务;因此对于开发者,就必要编制定义、公布、运行、调用服务的相关代码。而服务就不得不运行在一定的宿主上,这么些宿主可以是控制台应用程序进度、Windows或Web应用程序进度,也得以是Windows服务进度,或者为最常用的IIS宿主。在宿主内部,则封装了大路堆栈,其中又包含了对协商、编码、新闻传输、代理的拍卖。而在通道层的顶部,还提供了一个高级运行时,以针对应用程序的开发人士。

所以,大家得以这么认为,WCF是.NET Framework
3.x的一有些,它包含了用来服务定制、发表与运作以及新闻传递和拍卖的运转时环境以及相关类的汇集,它提供了在Windows平台下开发和部署服务的SDK。几乎组成如下图所示:

图片 1 

2、WCF是如何运行的?

若是从宏观的角度来分析WCF的运行机制,它的兑现并不复杂。WCF的系统架构是依照一种拦截机制来贯彻的,负责传递和拦截音讯的机件为坦途,在客户端发出对服务端服务的调用时,首先会经过一个劳务代办对象,将调用方提供的靶子连串化到新闻中,然后该新闻则通过通道进行传递。通道不只是包罗一个,而是三个通道对音讯举行拍卖,包括传输、信息编码、管理会话、传播工作等,但最尾部的大路总是传输通道。那么些通道的咬合形成了一个通道堆栈。由于目的已经被体系化,因此此时通道传递的信息可以跨进度或机器举行传递,利用传输通道传递到服务端。服务端的结合与客户端基本相似,依然是经过通道栈中最底部的传导通道接收音讯,然后解析音讯编码,并一难得地往上传输。在服务端的通道栈之上,则是一个分发器(Dispatcher,或者说是调度器),它会率先对信息举行反省,然后选择一个客户端要调用的操作。在那几个进度中,新闻会被反种类化。

下图表明了WCF的万事运行进程:

图片 2 

出于WCF通过通道的方式传送新闻,整个通道同时担当了侦听器和拦截器的功效,它可以依照服务的概念,在措施执行的前或后执行不一的操作,例如事务、会话管理、安全等。那些操作在WCF中,大部分都可以以Attribute的法门利用到服务契约上,那样的贯彻形式,就类似于采取了AOP(面向服务编程)的措施为服务提供了大气的功底作用,有助于简化服务开发者的干活。

3、为何大家要选取WCF?
在Windows平台下,更加是在.NET平台下支付面向服务的应用程序,或者开发分布式系统,最佳选项就是WCF。为啥吗?原因就在于WCF涵盖了事先微软生产的富有用于分布式开发的技能,包蕴Remoting、Web
Services、WSE、MSMQ等,并以一种统一的编程情势来落到实处。

WCF既援救具备互操作性的Web服务,也可以完毕.NET客户端与.NET服务端的通讯,提供了分布式事务的支撑,同时在安全性上,它完全按照了WS-*的正式,别的,它还帮忙队列服务,可以非凡方便地使用音讯队列达成异步操作与脱机调用。而这几个效能,从前的技巧都只是一对的贯彻。如下表所示:

特性

Web Service

.NET Remoting

Enterprise Services

WSE

MSMQ

WCF

具有互操作性的Web服务

支持

 

 

 

 

支持

.NET到.NET的通信

 

支持

 

 

 

支持

分布式事务

 

 

支持

 

 

支持

支持WS标准

 

 

 

支持

 

支持

消息队列

 

 

 

 

支持

支持

WCF同时也使得面向服务编程尤其简约而统一了。借使使用旧有的技艺,由于种种技能的编程模型完全不等同,使得程序的迁移相当的不方便。例如,最初选择.NET
Remoting技术开发的分布式系统,由于工作必要的生成,须要揭晓具有互操作性的Web服务,就要求再行定义服务。并且,客户端的调用形式也暴发了转移,必要添加Web引用,通过UDDI去发现服务。

使用WCF则不然。WCF引入了用通道,它包裹了音讯的通讯细节,例如编码、事务处理、安全等,然后又通过引入绑定的概念,封装了大路的构成顺序与拍卖细节。最终,引入了独有的Endpoint元素,集成了地方、绑定和契约之间的“三位一体”,以最简便易行的方法定义和表露服务。

4、WCF基础的技巧因素有如何?

WCF的绝半数以上作用都位居一个独门的先后集System.ServiceModel.dll中。WCF的多少个最器重的技艺因素包含:绑定、契约、端点。

如前所述,绑定封装了大路的结缘顺序与处理细节,它直接决定了WCF的通讯格局,音信的编码格局,通道的合计,音信传递的可信性以及安全等内容。通过利用绑定,大家就无需精晓新闻在WCF通道中的落成细节,从而简化程序员的支付。正是因为此,WCF为开发人士提供了多少个放置绑定,基本上涵盖了WCF应用的多数景况。以下是亚伦Skonnard在《WCF深度绑定》一文中罗列的松开绑定:

绑定类名称

传输

消息编码

消息版本

安全模式

可靠消息传送

事务流(默认情况下禁用)

BasicHttpBinding

HTTP

文本

SOAP 1.1

不支持

不支持

WSHttpBinding

HTTP

文本

SOAP 1.2 WS-Addressing 1.0

消息

禁用

WS-AtomicTransactions

WSDualHttpBinding

HTTP

文本

SOAP 1.2 WS-Addressing 1.0

消息

启用

WS-AtomicTransactions

WSFederationHttpBinding

HTTP

文本

SOAP 1.2 WS-Addressing 1.0

消息

禁用

WS-AtomicTransactions

NetTcpBinding

TCP

二进制

SOAP 1.2

传输

禁用

OleTransactions

NetPeerTcpBinding

P2P

二进制

SOAP 1.2

传输

不支持

不支持

NetNamedPipesBinding

命名管道

二进制

SOAP 1.2

传输

不支持

OleTransactions

NetMsmqBinding

MSMQ

二进制

SOAP 1.2

消息

不支持

不支持

MsmqIntegrationBinding

MSMQ

不支持(使用 WCF 之前的序列化格式)

不支持

传输

不支持

不支持

CustomBinding

您决定

您决定

您决定

您决定

您决定

您决定

每种绑定对应分化的传导协议、新闻编码格式和本子以及安全、可依赖性和事情方式。WCF也提供了扩充绑定的法子,例如通过CustomBinding或者定义派生与Binding的类。

WCF的契约包涵服务契约、数据契约和音信契约(特其余,还包涵了错误契约,用于格外的处理)。其中服务契约为面向服务应用程序的基本,通过它能够定义服务。数据契约则为服务所要传递的多少。由于劳动的调用需求跨进度或机器举行通讯,就需求服务多少必须可以被体系化和反体系化。纵然.NET本身提供了数额的种类化效用,但WCF的数目契约尤其切合服务多少的概念习惯。至于新闻契约,则可以将劳动数据定义为音信,包蕴XML文本格式、MTOM(音信传输优化机制)格式和二进制格式。

绑定(Binding)、契约(Contract)与劳动的地点(Address)组合在一块,则多变了终结点(Endpoint),如下图所示:

图片 3 

Address是Endpoint的网络地址,它标志了音讯发送的目的地。Binding描述的是何等发送音信,例如音讯发送的传输协议(如TCP,HTTP),安全(如SSL,SOAP信息安全)。Contract则描述的是音讯所含有的情节,以及信息的集体和操作办法,例如是单向,双向依旧请求/响应措施。

引入终结点可以说是WCF的一个高大创举,通过它使得大家能够进一步简单的揭露和管理服务,尤其是揭发和管制三个服务。每个服务必须至少存有一个终结点,而客户端正是经过终结点知道服务的相干音讯,例如地点、消息编码格式、传输协议以及服务的情节,然后在展开科学的调用。最特其他是,同一个劳务可以定义多个终结点,每个终结点可以是不相同的地址、不一致的绑定方式,以便于满足多少个客户端的不比须要。而对此服务的公布者而言,我们只要求管理终结点的配备,就可以成功对劳务的军事管制,这也为服务的托管提供了便宜。

5、WCF首要含有如何内容?

Juval的《Programming WCF
Services》一书基本已经包罗了WCF技术的满贯。概括来讲,首要概括绑定、服务契约、数据契约、音信传递、万分处理、实例形式、并发处理、事务处理、安全以及队列服务等。

绑定属于WCF基本的技艺因素,是WCF举办通讯处理的根基。领会绑定的连带文化,有助于开发WCF应用程序。因为在分化的事务需要下,可能对通讯情势、协议、信息编码等多个地点会有例外的须要。在配制、揭橥和运行服务时,都亟需对绑定进行操作。因此,我们不能不控制WCF内置绑定的相关属性,熟习绑定元素的相干布署。其它,在有些高级应用上,大家还要控制自定义绑定的方法,精晓在自定义绑定时,添加绑定元素的办法与各类,领会Binding基类的相干属性和格局。以及与绑定配置相关的类。

劳动契约是WCF的根本处理对象,服务的概念和设置正是经过劳务契约完成的。除了精通ServiceContract和OperationContract的基础运用之外,还索要相比WCF服务编程与一般的.NET编程之间的分歧,例如服务的继承与多态是何许完成的。最器重的是什么根据SOA的想想划分服务的边界,确定服务的粒度大小,那亟需从系统的易用性、可增加性、品质等四个方面拓展衡量。

劳务契约中有关操作的概念要遭逢许多羁绊,其中最要害的就是对数据的处理,那也是WCF引入数据契约的目标。由于WCF的特殊性,因此我们须求精晓部分格外数据类型的连串化情势,例如泛型类型、集合、DataSet等。

封锁服务操作定义的还包涵对特其余拍卖,WCF对丰裕有一套特种的处理格局,可以依照实际的意况,确定很是音讯是否必要开展通讯,以及出现卓殊时,是还是不是要求为止服务实例,或一而再保持会话。

WCF为音讯传递提供了更加大的得心应手。它提供了特其他Message类以及有关的读写器,例如XmlDictionaryReader和XmlDictionaryWriter等对信息举行读写,那其中蕴涵了对音讯版本、编码格式、音讯标头和正文等的操作。同时,WCF还提供了音讯与情势之间的映照。在提供系统的互操作性时,通晓WCF的音信传递格局很有要求。

据悉不相同的需求,WCF将实例形式分为PerCall,Single和PerSession三种办法。通过设置服务行为的InstanceContextMode属性,来治本服务实例的生活周期,可以简化开发人员的办事。大家只必要领悟那三种实例情势的特性即可。常常状态下,我提出服务使用PerCall格局,假如要求保持服务与客户端之间的对话,则足以采纳PerSession形式。唯有在对品质和可伸缩性没有太大须求的图景下,才得以应用Single格局。

有关事务处理、并发处理以及安全,紧要都是透过相关的劳动行为开展设置和治本。那些情节都是WCF高级应用所不可或缺精晓的内容,尤其对于开发公司级应用系统而言。至于队列服务,紧假如采纳了音讯队列,以达成系统可以脱机访问服务,并维持服务处境的一头。

6、WCF主用适用于如何应用场景?

WCF本身就是微软为了酬答SOA战略所推出的一套基于.NET
Framework下的SDK。当我们在Windows平台下,基于.NET框架开发一套系统,同时必要那套系统要求与其它平台例如WebLogic、WebSphere或者JBoss举办互相时,就要求动用WCF技术了。那是因为WCF的互操作性所控制的。

现阶段来看,WCF在集团应用中还并未拿走大批量的行使,但随着开发者对.NET
3.x的尖锐精通,WCF会日益深刻人心。由于WCF集成了.NET编程开发的习惯,对于.NET开发人士而言,就大大地降落了学习曲线,其余,WCF保留了对旧有技巧包括Web
Service、.NET
Remoting、MSMQ、WSE的支撑,同时对于旧有技术到WCF的迁移也提供了老大好的化解方案。因此,借使.NET人士若要应用SOA的缓解方案,那么WCF无疑就是顶级选项。单以支付而论,利用WCF定义服务、公开服务以及运行服务,利用WF完结工作流的陈设性、运行与管理、利用WPF作为拥有充分表现的富客户端,或者经过AJAX+SilverLight开发调用WCF服务的客户端,以及因此CardSpace落成对劳动安全的安装与治本,就可以实施一整套的SOA解决方案。同时,WCF还足以结合Biztalk以及Sharepoint,使得SDK能够搭载于应用服务器之上,更大程度地满足公司应用的急需。

除去举行SOA解决方案之外,WCF对于开发分布式系统而言,也是上佳的。当大家的选拔种类须求在三个服务器上运行差距服务,以支撑多量的造访负荷、大数据量处理、数据挖掘等工作时,就可以选取WCF开发分裂的劳动,然后托管在不一样的服务器上,此时,整个系统就足以有效地应用服务器资源,减轻系统负荷。

参考:
1、Juval Lowy著,张逸、徐宁译《WCF服务编程》
2、亚伦 Skonnard,《WCF深度绑定》
3、Aaron Skonnard,《使用自定义行为扩大WCF》
4、Boris Lublinsky,《完成一个.NET Web 瑟维斯s服务注册中央》

相关文章

网站地图xml地图