蒙在股里 发表于 2015-1-18 11:29:43

ASP.NET网页编程之WCF基本常识问与答仓酷云

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深度绑定》一文中枚举的内置绑定:
绑定类称号
传输
动静编码
动静版本
平安形式
牢靠动静传送
事件流(默许情形下禁用)
BasicHttpBinding
HTTP
文本
SOAP1.1

不撑持
不撑持
WSHttpBinding
HTTP
文本
SOAP1.2WS-Addressing1.0
动静
禁用
WS-AtomicTransactions
WSDualHttpBinding
HTTP
文本
SOAP1.2WS-Addressing1.0
动静
启用
WS-AtomicTransactions
WSFederationHttpBinding
HTTP
文本
SOAP1.2WS-Addressing1.0
动静
禁用
WS-AtomicTransactions
NetTcpBinding
TCP
二进制
SOAP1.2
传输
禁用
OleTransactions
NetPeerTcpBinding
P2P
二进制
SOAP1.2
传输
不撑持
不撑持
NetNamedPipesBinding
定名管道
二进制
SOAP1.2
传输
不撑持
OleTransactions
NetMsmqBinding
MSMQ
二进制
SOAP1.2
动静
不撑持
不撑持
MsmqIntegrationBinding
MSMQ
不撑持(利用WCF之前的序列化格局)
不撑持
传输
不撑持
不撑持
CustomBinding
您决意
您决意
您决意
您决意
您决意
您决意

每种绑定对应分歧的传输协定、动静编码格局和版本和平安、牢靠性和事件形式。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却不习惯了。

admin 发表于 2015-1-21 08:35:35

我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。

冷月葬花魂 发表于 2015-1-30 12:37:14

asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!

只想知道 发表于 2015-2-10 03:37:14

Asp.net:首先来说,Asp.net和Asp没什么关系,看着像是升级版本什么的,其实没什么联系。Asp是脚本编程,用的是ASP语言,而ASP.net用的是C#语言,完全不同的东西。

愤怒的大鸟 发表于 2015-2-21 07:31:02

关于ASP.NET功能上,ASP.NET比微软以前的ASP(96年出现)有更强大的library,更好的稳定性。ASP.NET可以使用.NETFramework中所有组件(也就是说.NET能实现的,ASP.NET一样能实现)。

灵魂腐蚀 发表于 2015-2-21 21:08:14

ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。

变相怪杰 发表于 2015-3-2 10:53:53

由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。

再见西城 发表于 2015-3-11 03:18:09

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。

不帅 发表于 2015-3-17 19:10:52

在调试JSP代码时,如果程序出错,JSP服务器会返回出错信息,并在浏览器中显示。这时,由于JSP是先被转换成Servlet后再运行的,所以,浏览器中所显示的代码出错的行数并不是JSP源代码的行数。

海妖 发表于 2015-3-24 21:35:48

ASP.NET:ASP.net是Microsoft.net的一部分,作为战略产品,不仅仅是ActiveServerPage(ASP)的下一个版本;它还提供了一个统一的Web开发模型,其中包括开发人员生成企业级Web应用程序所需的各种服务。ASP.NET的语法在很大程度上与ASP兼容,同时它还提供一种新的编程模型和结构,可生成伸缩性和稳定性更好的应用程序,并提供更好的安全保护。
页: [1]
查看完整版本: ASP.NET网页编程之WCF基本常识问与答仓酷云