zoukankan      html  css  js  c++  java
  • WCF Contarct

    本文的出发点:

    通过阅读本文,能解决以下的问题

    1. 什么是契约?
    2. 契约有几种?,他们都有什么用途
    3. 如何定义契约?
    4. 契约是独立于平台的么?
    5. 契约和以往哪种技术比较相像,又有什么不同?

    本文适合的读者

    WCF的初学者,可以没有任何SOA或者其他分布式技术经验

    什么是契约?

        任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定好数据交换规则的,这个规则正是交换数据的双方(比如服务器端和客户端)能彼此理解对方的依据,WCF作为分布式开发技术的一种,同样具有这样一种特性。而在WCF中制定的的规则就被称之为契约(Contract),它是WCF的消息标准,是任何一个wcf程序不可或缺的一部分。

    契约有几种?,他们都有什么用途

    在WCF中,契约分为四种,它们分别为:

    1. 用于定义服务操作的服务契约:Service Contract

      这种级别的契约又包括两种:ServiceContract和OperationContract

      ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调用,而OperationContract用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。

    2. 用于自定义数据结构的数据契约:Data Contract

      数据契约也分为两种:DataContract和DataMember.DataContract用于类或者结构上,指示 WCF此类或者结构能够被序列化并传输,而DataMember只能用在类或者结构的属性(Property)或者字段(Field)上,指示WCF该属性或者字段能够被序列化传输。

    3. 用于自定错误异常的异常契约:Fault Contract

      FaultContract用于自定义错误异常的处理方式,默认情况下,当服务端抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息,此时,我们可以自定义异常消息的格式,将我们关心的消息放到错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。

    4. 用于控制消息格式的消息契约:Message Contract

      简单的说,它能自定义消息格式,包括消息头,消息体,还能指示是否对消息内容进行加密和签名。

    如何定义契约?

         其实上面落里罗嗦说了一大堆,似乎契约使用起来应该很难的样子了,可事实上,契约的使用是很简单的,它无非就是在普通的程序结构上添加一些声明性的属性就可以了,比如我们可以直接在类上声明ServerContractAttribute,此时这个类就能被远程客户端访问到,而在类中的方法中(Method)添加OperationContractAttribute就能将方法暴露给远程客户端,其他的契约也一样的用法,比较难得还是消息契约和错误契约,当也很简单。我这里没有WCF开发环境,所以具体怎么用,我就不做示例了,您仍不明白的话,可以参考下面几篇文章:

    http://www.cnblogs.com/artech/archive/2007/02/28/659331.html

    http://www.rainsts.net/article.asp?id=427

    http://www.rainsts.net/article.asp?id=429

    http://www.rainsts.net/article.asp?id=430

    他们的blog中都有较详细的阐述和使用方法说明

    契约是独立于平台的么?

        WCF作为一种能够跨平台的体系框架,其应用肯定会有异构,异网的情况发生,那么作为通讯依据的契约能否自动适用于上述情况呢?答案是肯定的,契约是独立于平台之外的,它只约束通讯的双方应该遵守什么样的规则,而丝毫不管双方各自采用的是什么样的技术和什么样的操作系统,也只有这样,WCF才能有真正的生命力。

    契约和以往哪种技术比较相像,又有什么不同?

        如果非要拿契约和以往的技术相比较的话,契约和asp.net xml web service的声明性编程模型甚是相似,比如在web service中在类上标记WebServiceAttribute便可以将此类用于远程调用,而将方法添加WebMethondAttribute也可以将其暴露给远程客户端,这和WCF中的ServiceContract和OperationContract简直如出一辙,但不同的是,WCF中的契约要比Xml Web Service中的要详尽的多,比如ServiceContract和OperationContract可以直接使用在接口上面,而实现该接口的类就继承了这种契约声明,自动拥有契约所规范的动作和行为,这就使得程序员更方便的使用面向接口的编程方式,可以使同一服务拥有不同的实现,在新旧版本升级的同时,能够使新老版本共同运行。



    本文的参考资料

    http://www.cnblogs.com/artech/archive/2007/02/28/659331.html

    http://www.rainsts.net/article.asp?id=427

    http://www.rainsts.net/article.asp?id=429

    http://www.rainsts.net/article.asp?id=430

    http://www.cnblogs.com/wayfarer/archive/2006/04/10/370957.html   

  • 相关阅读:
    一些业内有名的网站收集
    WCF重载
    FCKEditor fckconfig.js配置,添加字体和大小 附:中文字体乱码问题解决
    查询第几条到第几条的数据的SQL语句
    SPOJ 9939 Eliminate the Conflict
    UVA 10534 Wavio Sequence
    HDU 3474 Necklace
    POJ 2823 Sliding Window
    UVA 437 The Tower of Babylon
    UVA 825 Walking on the Safe Side
  • 原文地址:https://www.cnblogs.com/qianyz/p/2612199.html
Copyright © 2011-2022 走看看