JavaWCF基础知识问与答

学学WCF已有近两年的时刻,其间又翻译了Juval的墨宝《Programming WCF
Services》,笔者依然觉得WCF还有越多的始末值得探究与发掘。学得越来越多,反而越发觉得温馨所知太少,直到未来,笔者也以为自身只是是初窥WCF的途径而已。

“学以致用”,借使只是是梦想能够在类型中创设地行使WCF,那么对于程序员而言,能够有两种选拔,壹种是“知其可是不知其所以然”,只要精晓了WCF的基础知识,那么对于一般的使用就丰盛了。要实现那点就很不难了,微软选择了一定的办法,将WCF那门技术优雅地显示给开发者,封装了复杂的落到实处逻辑,提供了简单调用的类库和相关的工具,使得开发者可以急速地成功WCF程序的支付。其余一种艺术自然正是深浅挖掘WCF的内部贯彻了,那是对WCF专家提议的供给。即使我们要运用WCF完结SOA化解方案,就相会临重重WCF的高等应用,怎么着客观、有效地选拔WCF,并基于项目其真实情意况对WCF实行扩大,就变成了WCF专家必须化解的难题。

所以,若是要读书WCF,你不可能不找准自身攻读的遐思与指标,然后合理地布置协调的求学进程表,那才是不错的学习方法。本文试图对WCF的有的基础概念作1些试探性的阐发与分析,并以问答的章程组织,希望可以部分解答一些愿意学习WCF,但犹自徘徊在门外的开发者。

Java,1、WCF是什么?

从WCF所处的职分来看,它是包罗在.NET 三.0(也包涵.NET
3.伍)之中的。我们注意比较.NET 3.0与.NET 二.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
瑟维斯、WSE、MSMQ集成在同步,从而降低了分布式系统开发者的就学曲线,并统一了支出规范。

WCF与其余类库还有分歧的地点,则在于WCF充裕地展现了运营时环境的定义。对于早期选择WCF的开发职员而言,就或然精通假若在.NET
贰.0下要付出WCF,还索要尤其下载二个Runtime Component
三.0版,个中就隐含了WCF、WF等内容。在.NET中定位存在所谓“宿主”的概念,整个.NET
Framework(或然说是CL福特Explorer)就可以认为是三个大的宿主,就如Java的虚拟机壹样。由于WCF对劳动具有尤其的供给,对于服务端,须要揭露和周转服务;对于客户端,则必要调用服务;由此对于开发者,就供给编写制定定义、宣布、运行、调用服务的相干代码。而服务就只好运维在一定的宿主上,这么些宿主能够是控制台应用程序进度、Windows或Web应用程序进度,也能够是Windows服务进度,也许为最常用的IIS宿主。在宿主内部,则封装了大路堆栈,在那之中又带有了对协商、编码、消息传输、代理的拍卖。而在通道层的顶部,还提供了四个高级运行时,以针对应用程序的开发职员。

因此,大家能够如此认为,WCF是.NET Framework
三.x的壹局地,它富含了用于服务定制、公布与运维以及音讯传递和处理的运维时环境以及相关类的聚集,它提供了在Windows平台下支付和安排服务的SDK。大约组成如下图所示:

Java 1 

贰、WCF是什么样运维的?

假如从微观的角度来分析WCF的运转机制,它的完成并不复杂。WCF的系统架构是依照壹种拦截机制来完毕的,负责传递和阻拦音信的组件为坦途,在客户端发出对服务端服务的调用时,首先会通过八个服务代办对象,将调用方提供的靶子连串化到新闻中,然后该新闻则通过通道实行传递。通道不只是总结1个,而是八个通道对新闻实行拍卖,包罗传输、新闻编码、管理会话、传播工作等,但最尾巴部分的康庄大道总是传输通道。那一个通道的咬合形成了二个通路堆栈。由于指标已经被类别化,由此此时通道传递的音信能够跨进度或机器举办传递,利用传输通道传递到服务端。服务端的3结合与客户端基本相似,依然是由此通道栈中最尾部的传导通道接收音信,然后解析音信编码,并1稀有地往上传输。在服务端的通道栈之上,则是五个分发器(Dispatcher,也许说是调度器),它会率先对音信实行检讨,然后选用二个客户端要调用的操作。在那么些进程中,新闻会被反类别化。

下图表达了WCF的任何运转进程:

Java 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的超过55%效益都置身1个独立的次序集System.ServiceModel.dll中。WCF的多少个最根本的技能因素包涵:绑定、契约、端点。

如前所述,绑定封装了大路的咬合顺序与处理细节,它一直控制了WCF的通讯方式,音信的编码情势,通道的说道,音讯传递的可信赖性以及安全等剧情。通过利用绑定,我们就无需询问新闻在WCF通道中的达成细节,从而简化程序员的开发。正是因为此,WCF为开发人士提供了两个放置绑定,基本上涵盖了WCF应用的大部气象。以下是AaronSkonnard在《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(音讯传输优化学工业机械制)格式和2进制格式。

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

Java 3 

Address是Endpoint的互连网地址,它标志了音信发送的指标地。Binding描述的是怎么发送音信,例如消息发送的传输协议(如TCP,HTTP),安全(如SSL,SOAP音讯安全)。Contract则描述的是消息所包蕴的剧情,以及音信的团队和操作情势,例如是单向,双向还是请求/响应措施。

引进终结点能够说是WCF的三个了不起创举,通过它使得我们能够更进一步简单的揭穿和管理服务,特别是揭破和管理两个服务。每一个服务必须至少存有一个终结点,而客户端就是经过终结点知道服务的有关音讯,例如地点、音讯编码格式、传输协议以及服务的内容,然后在拓展科学的调用。最特别的是,同3个劳务能够定义三个终结点,每一个终结点能够是差别的地点、差异的绑定方式,以便于满足七个客户端的不如要求。而对于服务的发表者而言,我们只须求管住终结点的配置,就足以做到对服务的治本,这也为劳动的托管提供了有益。

5、WCF首要包罗哪些内容?

Juval的《Programming WCF
Services》1书基本已经包罗了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高级应用所必不可缺精晓的始末,越发对于开发公司级应用连串而言。至于队列服务,首即使使用了音讯队列,以促成系统能够脱机访问服务,并保持服务景况的协同。

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

WCF本人就是微软为了应对SOA战略所出产的1套基于.NET
Framework下的SDK。当大家在Windows平台下,基于.NET框架开发一套系统,同时需求那套系统要求与别的平台例如WebLogic、WebSphere可能JBoss举办交互时,就必要选取WCF技术了。那是因为WCF的互操作性所决定的。

现阶段来看,WCF在集团应用中还从未取得大批量的采取,但随着开发者对.NET
3.x的深透摸底,WCF会日渐深入人心。由于WCF集成了.NET编制程序开发的习惯,对于.NET开发职员而言,就大大地降低了读书曲线,其余,WCF保留了对旧有技巧包罗Web
瑟维斯、.NET
Remoting、MSMQ、WSE的援救,同时对于旧有技术到WCF的迁徙也提供了越来越好的化解方案。由此,如若.NET人士若要应用SOA的缓解方案,那么WCF无疑正是一级采取。单以支付而论,利用WCF定义服务、公开服务以及运转服务,利用WF达成工作流的宏图、运维与管理、利用WPF作为持有丰硕表现的富客户端,或许通过AJAX+SilverLight开发调用WCF服务的客户端,以及由此CardSpace完毕对劳务安全的设置与管理,就能够实施壹整套的SOA化解方案。同时,WCF还足以结合Biztalk以及Sharepoint,使得SDK能够搭载于应用服务器之上,越来越大程度地满意集团应用的须要。

除了进行SOA消除方案之外,WCF对于开发分布式系统而言,也是名不虚传的。当我们的使用系统需求在多个服务器上运营不相同服务,以支持大量的走访负荷、大数据量处理、数据挖掘等工作时,就足以接纳WCF开发不一致的劳动,然后托管在分歧的服务器上,此时,整个种类就足以使得地动用服务器财富,减轻系统负荷。

参考:
壹、Juval Lowy著,张逸、徐宁译《WCF服务编制程序》
二、亚伦 Skonnard,《WCF深度绑定》
三、亚伦 Skonnard,《使用自定义行为扩展WCF》
四、Boris Lublinsky,《完成3个.NET Web Services服务注册宗旨》

相关文章