探讨WCFDataContract功能

学习了这么长时间的WCF,现在我们简单的概述一下关于WCF中的Data Contract。在我们看来,Service Orientation提供了一种对业务、功能进行分解的方式。针对SO,我们把一个具体的业务流程或者一个复杂的功能分解成一个个独立完成某项任务的子单元,这些子单元通过一个个Service来承载。对于Service本身来讲,他们应该是自治的,独自完成自己的功能、不依赖于其他的Service。

成都创新互联服务项目包括庐山网站建设、庐山网站制作、庐山网页制作以及庐山网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,庐山网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到庐山省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

#T#但是Service的价值体现在它被潜在的消费者使用的程度。这实际上包含两方面的内容,作为Service本身,它如何将自己暴露出来,供一切可能的潜在用户调用,这些潜在用户不仅仅指那些不同的Client,也包含其他的Service:Service Orientation其中一个特征就是“Service should be composite”,鼓励将一个个相关细粒度的Service组合成一个大的Service。这样有利于较大限度的实现重用,而重用往往意味着更小的投入、更佳的可维护性。而另一方面就是这些消费者通过怎样的方式来调用它所需要的Service。

这实际上体现了两者相互交互的问题。在一个分布式的环境中要实现两者的交互,有两个必须要解决的问题:如何保证Service的使用者对 Service的调用能够被Service端理解,以及对Service的调用如何抵达Service Side。后者实质上是关于communication的问题,我们现在不去谈它。第一个问题就是Contract需要解决的问题。

我们知道SOA一个主要的目标就是促进不同技术平台的互操作,要真正实现这样一个宏伟的目标是一件极不容易的事情,需要不同的厂商和标准组织相互协作,制定一个大家一致遵循的标准。这样一个标准就是WS-* 。我们很清楚,无论个个厂商各自的标准怎样千差万别,但是有个标准是他们必须要遵循的,那就是Internet的标准,如果哪家公司拒绝Internet,那肯定要被淘汰的。而对于Internet,基于Http的网络协议和基于XML的数据表达已经成为了事实上的标准。对于SOA来说,XML不仅仅用于表示Service调用携带的数据(参数和返回值),更用于表示这个调用本身,以及满足各种要求的控制信息, 比如基于Security、Session、Reliable Messaging、Transaction等等的控制信息。WS-*就是一个基于XML的标准。而对于SOA中的Contract所要做的就是寻求一种厂商中立的方式来表示Service的接口、和用于交互的数据结构。前者就是Service Contract、后者就是WCF Data Contract。

SOA中的一个Service由一组相关的Operation来构成。Service Contract用于表示构成该Service所有Operation的Interface(而不是Implementation)。说得更加具体点,大家都知道Consumer和Service之间的交互都是通过Message的形式来实现的,一次交互就是一次Message Exchange。在不同的场景,我们以不通过Pattern来进程Message Exchange,比如我们通常使用Request-Response的方式来向Service发送Request进而得到返回结果,我们也可以以 Request-Forget的形式来异步地调用Service(不需要从Service获取Response),我们可以让一个Service在没有收到任何Request的情况下,以广播的形式向注册的Client发送通知,当然我们还有其他不同的消息交互的模式,我们把这些不同的信息交互方式称为 MEP(Message Exchange Pattern)。也就是说,一个Operation最终通过被最终转换成了按照某种MEP进行的消息交互,而Service Contract旨在实现对这种MEP的描述,比如是否需要Request Message或者Response Message(如果仅仅有Response Message就是Notification的方式;如果仅仅具有Request Message,那就是我们上面谈到的Request-Forget的模式),和Message本身具有的格式。

上面我们说了Service Contract是以一种厂商中立的形式描述体现为某种模式的消极交互、构成整个Service的所有Operation。而我们也说了Consumer 和Service的交互本质上看就是按照某种Pattern体现的一次Message Exchange,好像具有了Service Contract的描述就可以了。但是实际上,单单有了Service Contract对Service的描述还不够,因为Service Contract本身缺乏对携带于Message,用于信息传递的数据类型的描述,而这是WCF Data Contract需要解决的问题。我们知道不同的技术平台对数据类型的表示是不一样的,可能某一种技术平台使用16bit来表述一个浮点数,另一种则使用 32bit。所以要想实现不同技术平台的互操作,将不同技术平台同一类型的数据以一种厂商中立的形式来描述是必须的。

概括的说,SOA中的Service Contract和WCF Data Contract就是一种厂商中立的数据呈现方式对Service Interface和Data Type的。而Service的调用都是通过SOAP Message来实现,SOAP是基于XML,而对于XML结构的定义,我们很自然地想到XSD,我们可简单地将SOA中的Contract看成是一个XSD。

上面我们实际上是在一个厂商中立的前提下探讨Contract,这里的Contract和具体的平台和技术无关。接下来我们要谈的是基于技术的话题:讨论一下WCF下的Contract。简单地说,WCF中的Contract主要的功能就是如何将一个基于.NET的CLR Type,Interface或者Class,转化成一个我们上面提到的Neutral Contract。比如,如果我们在一个Interface和它的成员上分别运用Service Contract Attribute和Operation Contract,当我们Host实现了该Interface的Service的时候,WCF就能将在一个.NET-specific的CLR Type暴露成一个Neutral Service Contract。同理对于一个,我们通过在一个Class和它的成员上分别添加DataContractAttribute和 DataMemberAttribute,就可以就该CLR Type转变成Neutral Data Contract。

网站名称:探讨WCFDataContract功能
当前网址:http://www.shufengxianlan.com/qtweb/news10/289460.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联