|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
c语言的编译器,几乎是所有新平台都有的。因此从这点上看,c语言的程序,比其他任何语言更加容易跨平台。进修WCF已有近两年的工夫,其间又翻译了Juval的高文《ProgrammingWCFServices》,我仍旧以为WCF另有更多的内容值得探究与发掘。学得越多,反而更加以为本人所知太少,直到如今,我也以为本人不外是初窥WCF的门径罢了。
“学乃至用”,假如仅仅是但愿可以在项目中公道地使用WCF,那末关于程序员而言,能够有两种选择,一种是“知其但是不知其以是然”,只需把握了WCF的基本常识,那末关于一样平常的使用就充足了。要做到这一点就很简单了,微软承袭了一向的体例,将WCF这门手艺文雅地出现给开辟者,封装了庞大的完成逻辑,供应了易于挪用的类库和相干的工具,使得开辟者可以疾速地完成WCF程序的开辟。别的一种体例天然就是深度发掘WCF的外部完成了,这是对WCF专家提出的请求。假如我们要使用WCF完成SOA办理计划,就会遭受很多WCF的初级使用,怎样公道、无效地使用WCF,并依据项目实践情形对WCF举行扩大,就成了WCF专家必需办理的困难。
因而,假如要进修WCF,你必需找准本人进修的念头与方针,然后公道地布置本人的进修进度表,这才是准确的进修体例。本文试图对WCF的一些基本观点作一些探索性的论述与剖析,并以问答的体例构造,但愿可以部分化答一些但愿进修WCF,但犹自倘佯在门外的开辟者。
1、WCF是甚么?
从WCF所处的地位来看,它是包括在.NET3.0(也包含.NET3.5)当中的。我们注重对照.NET3.0与.NET2.0,实在独一的区分就是.NET3.0包括了WCF、WPF、WF(大概另有CardSpace)罢了。因而,我们以为WCF是.NET框架的一部分,仿佛其实不为过。尤其关头的是,WCF其实不能离开.NET框架而独自存在(但非WCF客户端能够挪用WCF服务),因而,固然WCF是微软用以应对SOA办理计划的开辟需求而专门推出的,但它并非比方Spring、Struts那样的框架,也不是像EJB那样的容器大概服务器。微软真正切合SOA企业使用服务器脚色的,我想应当是BiztalkServer。
严厉的说,WCF就是专门用于服务定制、公布与运转和动静传送和处置的一组专门类的汇合,也就是所谓的“类库”。这些类经由过程必定体例被构造起来,配合合作,并为开辟者供应了一个一致的编程形式。WCF之以是特别,是在于它所应对的场景与一般的.NET类库分歧,它次要用于处置历程间以致于呆板之间动静的传送与处置,同时它引进了SOA的计划头脑,以服务的体例发布并运转,以便利客户端跨历程和呆板对服务举行挪用。实践上,WCF就是微软关于散布式处置的编程手艺的集年夜成者,它将DCOM、Remoting、WebService、WSE、MSMQ集成在一同,从而下降了散布式体系开辟者的进修曲线,并一致了开辟尺度。
WCF与别的类库另有分歧的中央,则在于WCF充实地表现了运转时情况的观点。关于初期利用WCF的开辟职员而言,便可能晓得假如在.NET2.0下要开辟WCF,还必要专门下载一个RuntimeComponent3.0版,个中就包括了WCF、WF等外容。在.NET中一向存在所谓“宿主”的观点,全部.NETFramework(大概说是CLR)就能够以为是一个年夜的宿主,就像Java的假造机一样。因为WCF对服务有着专门的需求,关于服务端,必要公布和运转服务;关于客户端,则必要挪用服务;因此关于开辟者,就必要编写界说、公布、运转、挪用服务的相干代码。而服务就只能运转在特定的宿主上,这些宿主能够是把持台使用程序历程、Windows或Web使用程序历程,也能够是Windows服务历程,大概为最经常使用的IIS宿主。在宿主外部,则封装了通道仓库,个中又包括了对协定、编码、动静传输、代办署理的处置。而在通道层的顶部,还供应了一个初级运转时,以针对使用程序的开辟职员。
因此,我们能够如许以为,WCF是.NETFramework3.x的一部分,它包括了用于服务定制、公布与运转和动静传送和处置的运转时情况和相干类的汇合,它供应了在Windows平台下开辟和部署服务的SDK。大抵构成以下图所示:
<br>
2、WCF是如何运转的?
假如从微观的角度来剖析WCF的运转机制,它的完成其实不庞大。WCF的系统架构是基于一种拦阻机制来完成的,卖力传送和拦阻动静的组件为通道,在客户端收回对服务端服务的挪用时,起首会经由过程一个服务代办署理对象,将挪用方供应的对象序列化到动静中,然后该动静则经由过程通道举行传送。通道不但是包含一个,而是多个通道抵消息举行处置,包含传输、动静编码、办理会话、传布事件等,但最底层的通道老是传输通道。这些通道的组成构成了一个通道仓库。因为对象已被序列化,因此此时通道传送的动静能够跨历程或呆板举行传送,使用传输通道传送到服务端。服务真个组成与客户端基础类似,仍旧是经由过程通道栈中最底层的传输通道吸收动静,然后剖析动静编码,并一层层地往上传输。在服务真个通道栈之上,则是一个分发器(Dispatcher,大概说是调剂器),它会起首抵消息举行反省,然后选择一个客户端要挪用的操纵。在这个过程当中,动静会被反序列化。
下图申明了WCF的全部运转历程:
<br>
因为WCF经由过程通道的体例传送动静,全部通道同时承当了侦听器和拦阻器的功效,它能够依据服务的界说,在办法实行的前或后实行分歧的操纵,比方事件、会话办理、平安等。这些操纵在WCF中,年夜多半都能够以Attribute的体例使用到服务左券上,如许的完成体例,就相似于接纳了AOP(面向服务编程)的办法为服务供应了大批的基本功效,有助于简化服务开辟者的事情。
3、为何我们要选用WCF?
在Windows平台下,特别是在.NET平台下开辟面向服务的使用程序,大概开辟散布式体系,最好选择就是WCF。为何呢?缘故原由就在于WCF涵盖了之前微软推出的一切用于散布式开辟的手艺,包含Remoting、WebServices、WSE、MSMQ等,并以一种一致的编程形式来完成。
WCF既撑持具有互操纵性的Web服务,也可以完成.NET客户端与.NET服务真个通讯,供应了散布式事件的撑持,同时在平安性上,它完整遵守了WS-*的尺度,别的,它还撑持行列服务,能够十分便利天时用动静行列完成异步操纵与脱机挪用。而这些功效,之前的手艺都只是部分的完成。以下表所示:
特征
WebService
.NETRemoting
EnterpriseServices
WSE
MSMQ
WCF
具有互操纵性的Web服务
撑持
撑持
.NET到.NET的通讯
撑持
撑持
散布式事件
撑持
撑持
撑持WS尺度
撑持
撑持
动静行列
撑持
撑持
WCF同时也使得面向服务编程加倍复杂而一致了。假如接纳旧有的手艺,因为各类手艺的编程模子完整纷歧致,使得程序的迁徙十分的坚苦。比方,最后接纳.NETRemoting手艺开辟的散布式体系,因为营业需求的变更,请求公布具有互操纵性的Web服务,就必要从头界说服务。而且,客户真个挪用体例也产生了变更,必要增加Web援用,经由过程UDDI往发明服务。
接纳WCF则否则。WCF引进了用通道,它封装了动静的通讯细节,比方编码、事件处置、平安等,然后又经由过程引进绑定的观点,封装了通道的构成按次与处置细节。最初,引进了独占的Endpoint元素,集成了地点、绑定和左券之间的“三位一体”,以最复杂的体例界说和公布服务。
4、WCF基本的手艺要素有哪些?
WCF的年夜部分功效都放在一个独自的程序集System.ServiceModel.dll中。WCF的几个最主要的手艺元素包含:绑定、左券、端点。
如前所述,绑定封装了通道的构成按次与处置细节,它间接决意了WCF的通讯体例,动静的编码体例,通道的协定,动静传送的牢靠性和平安等外容。经由过程利用绑定,我们就无需懂得动静在WCF通道中的完成细节,从而简化程序员的开辟。恰是由于此,WCF为开辟职员供应了多个内置绑定,基础上涵盖了WCF使用的年夜部分场景。以下是AaronSkonnard在《WCF深度绑定》一文中枚举的内置绑定:
每种绑定对应分歧的传输协定、动静编码格局和版本和平安、牢靠性和事件形式。WCF也供应了扩大绑定的体例,比方经由过程CustomBinding大概界说派生与Binding的类。
WCF的左券包含服务左券、数据左券和动静左券(出格的,还包含了毛病左券,用于非常的处置)。个中服务左券为面向服务使用程序的中心,经由过程它能够界说服务。数据左券则为服务所要传送的数据。因为服务的挪用必要跨历程或呆板举行通讯,就必要服务数据必需可以被序列化和反序列化。固然.NET自己供应了数据的序列化功效,但WCF的数据左券加倍切合服务数据的界说习气。至于动静左券,则能够将服务数据界说为动静,包含XML文本格局、MTOM(动静传输优化机制)格局和二进制格局。
绑定(Binding)、左券(Contract)与服务的地点(Address)组合在一同,则构成了闭幕点(Endpoint),以下图所示:
<br>
Address是Endpoint的收集地点,它标志了动静发送的目标地。Binding形貌的是怎样发送动静,比方动静发送的传输协定(如TCP,HTTP),平安(如SSL,SOAP动静平安)。Contract则形貌的是动静所包括的内容,和动静的构造和操纵体例,比方是单向,双向仍是哀求/呼应体例。
引进闭幕点能够说是WCF的一个巨大创举,经由过程它使得我们可以加倍简单的公布和办理服务,特别是公布和办理多个服务。每一个服务必需最少具有一个闭幕点,而客户正直是经由过程闭幕点晓得服务的相干信息,比方地点、动静编码格局、传输协定和服务的内容,然后在举行准确的挪用。最出格的是,统一个服务能够界说多个闭幕点,每一个闭幕点能够是分歧的地点、分歧的绑定体例,以便于满意多个客户真个分歧必要。而关于服务的公布者而言,我们只必要办理闭幕点的设置,就能够完成对服务的办理,这也为服务的托管供应了便当。
5、WCF次要包括哪些内容?
Juval的《ProgrammingWCFServices》一书基础已涵盖了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计谋所推出的一套基于.NETFramework下的SDK。当我们在Windows平台下,基于.NET框架开辟一套体系,同时请求这套体系必要与别的平台比方WebLogic、WebSphere大概JBoss举行交互时,就必要接纳WCF手艺了。这是由于WCF的互操纵性所决意的。
今朝来看,WCF在企业使用中还没有失掉大批的使用,但跟着开辟者对.NET3.x的深切懂得,WCF会渐渐不得人心。因为WCF集成了.NET编程开辟的习气,关于.NET开辟职员而言,就年夜年夜地下降了进修曲线,别的,WCF保存了对旧有手艺包含WebService、.NETRemoting、MSMQ、WSE的撑持,同时关于旧有手艺到WCF的迁徙也供应了十分好的办理计划。因此,假如.NET职员若要使用SOA的办理计划,那末WCF无疑就是最好选择。单以开辟而论,使用WCF界说服务、公然服务和运转服务,使用WF完成事情流的计划、运转与办理、使用WPF作为具有丰厚体现的富客户端,大概经由过程AJAX+SliverLight开辟挪用WCF服务的客户端,和经由过程CardSpace完成对服务平安的设置与办理,就足以实行一整套的SOA办理计划。同时,WCF还能够分离Biztalk和Sharepoint,使得SDK可以搭载于使用服务器之上,更年夜水平地满意企业使用的必要。
除实行SOA办理计划以外,WCF关于开辟散布式体系而言,也是得天独厚的。当我们的使用体系必要在多个服务器上运转分歧服务,以支持大批的会见负荷、年夜数据量处置、数据发掘等事情时,就能够使用WCF开辟分歧的服务,然后托管在分歧的服务器上,此时,全部体系就能够无效天时用服务器资本,加重体系负荷。
参考:
1、JuvalLowy著,张逸、徐宁译《WCF服务编程》
2、AaronSkonnard,《WCF深度绑定》
3、AaronSkonnard,《利用自界说举动扩大WCF》
4、BorisLublinsky,《完成一个.NETWebServices服务注册中央》
来自:http://www.ckuyun.com/wayfarer/archive/2008/04/15/1153775.html
竟发现没有太大的帮助。总觉得要用起来,感觉到不了位。因为公司机器的原因,一直没有安装vs.net(也从来没有用过)。以前做asp的时候一直用DW(感觉其代码联想功能不错),可现在到了asp.net却不习惯了。 |
|