WCF从理论到实践(3):八号当铺之黑色契约

转载 2011年01月12日 10:33:00

 

 

本文的出发点:

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

  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

 

 

 

 

作者:jillzhang
出处:http://jillzhang.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

WCF契约之---服务契约 、数据契约、 消息契约

服务契约 描述了暴露给外部的类型(接口或类)、服务所支持的操作、使用的消息交换模式和消息的格式。每个WCF服务必须实现至少一个服务契约。使用服务契约必须要引用命名空间System.ServiceMod...
  • Percy__Lee
  • Percy__Lee
  • 2015年09月17日 13:59
  • 1400

WCF通讯方式之双向通讯

在双向通信中至少要定义两个服务,一个服务是供消费程序消费的,另一个则是在callBack的时候调用的服务,这个服务应该由消费程序实现。 其次,就是在服务端实现这些契约(说白了就是实现上面定义的接...
  • anlun
  • anlun
  • 2015年04月03日 14:36
  • 1618

学习算法导论——红黑树旋转插入和删除

红黑树是一棵二叉搜索树,每个节点有一个标志位表示颜色,该颜色可以是红(RED)或黑(BLACK)。通过对任何一条从根到叶子的简单路径上各点的颜色进行约束,就能确保没有一条路径会比其他路径长出2倍,因而...
  • sinat_30071459
  • sinat_30071459
  • 2016年03月15日 21:22
  • 2158

(3):契约版本处理-WCF课件

  • 2008年07月11日 23:57
  • 247KB
  • 下载

【学习】构建WCF面向服务的应用程序系列课程笔记:(3)契约版本处理

第一节:【学习】构建WCF面向服务的应用程序系列课程笔记:(1) WCF概要 第二节:【学习】构建WCF面向服务的应用程序系列课程笔记:(2) 契约设计 这节的内容看完之后,只能说有一个概...
  • llxchen
  • llxchen
  • 2011年09月08日 00:25
  • 1256

WCF从理论到实践(word版)

  • 2009年10月13日 16:59
  • 3.93MB
  • 下载

《WCF按部就班学习系列3_WCF数据契约概述》

本文的主要结构为:1)WCF数据契约的概述2)数据契约特性 3)实现代码分析及运行结果4)源码下载5)下一篇计划6)参考说明(1)WCF数据契约的概述(What)1.1数据契约是服务支持的契约职责的一...
  • richnaly
  • richnaly
  • 2011年01月26日 16:23
  • 589

WCF从理论到实践(5):Binding细解

本文的出发点: 通过阅读本文,您能了解以下知识: WCF中的Binding是什么? Binding的组成? Binding Element 的分类? Binding描述了那些层面的信息? 选择正确的B...
  • philiplb
  • philiplb
  • 2011年01月12日 10:38
  • 332

WCF从理论到实践(4):路在何方

本文的出发点 通过阅读本文,您能了解以下知识: Address是什么? Address的组成? 如何在配置文件中指定Address? 如何通过编程方式设置Address? Address有什么特殊应用...
  • philiplb
  • philiplb
  • 2011年01月12日 10:35
  • 455

WCF从理论到实践(1):揭开神秘面纱

引子      WCF是"Windows Communication Foundation "的缩写,原来的代号为"Indigo",它是MS为SOA(Service Oriented Architec...
  • philiplb
  • philiplb
  • 2011年01月12日 10:16
  • 307
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WCF从理论到实践(3):八号当铺之黑色契约
举报原因:
原因补充:

(最多只允许输入30个字)