登录
注册
论坛
共享空间
搜索
帮助
用户名:
密码:
会员
界面
简洁版本
在线
共享社区
编程技巧共享
.NET编程技巧共享
WCF从理论到实践(3):八号当铺之黑色契约
帖子标题
编程技巧共享
JAVA编程技巧共享
.NET编程技巧共享
WEB编程相关文章
互联网资源共享社区
商业智能共享
.NET源码共享
JAVA源码共享
开发工具共享
网页资料共享
教学资源共享
娱乐信息共享
精品游戏共享
老猫的理想信息区
技术交流区
业界新闻区
企业招聘
项目供求
广而告之
老猫的理想-共享社区站务区
站务管理
意见投诉
1
/ 1 页
1
跳转
页
查看:
932
WCF从理论到实践(3):八号当铺之黑色契约
mikecat
迈克老猫
个人空间
组别:
管理员
性别:
来自:
中国-石家庄
积分:
2328
帖子:
1996
注册:
2007-12-31
2008-04-22 08:23
|
只看楼主
树型
|
收藏
|
小
中
大
1
WCF从理论到实践(3):八号当铺之黑色契约
本文的出发点:
通过阅读本文,能解决以下的问题
什么是契约?
契约有几种?,他们都有什么用途
如何定义契约?
契约是独立于平台的么?
契约和以往哪种技术比较相像,又有什么不同?
本文适合的读者
WCF的初学者,可以没有任何SOA或者其他分布式技术经验
什么是契约?
任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定好数据交换规则的,这个规则正是交换数据的双方(比如服务器端和客户端)能彼此理解对方的依据,WCF作为分布式开发技术的一种,同样具有这样一种特性。而在WCF中制定的的规则就被称之为契约(Contract),它是WCF的消息标准,是任何一个wcf程序不可或缺的一部分。
契约有几种?,他们都有什么用途
在WCF中,契约分为四种,它们分别为:
用于定义服务操作的服务契约:Service Contract
这种级别的契约又包括两种:ServiceContract和OperationContract
ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调用,而OperationContract用于类中的方法(Method)上,用于指示WCF该方法可被远程调用。
用于自定义数据结构的数据契约:Data Contract
数据契约也分为两种:DataContract和DataMember.DataContract用于类或者结构上,指示WCF此类或者结构能够被序列化并传输,而DataMember只能用在类或者结构的属性(Property)或者字段(Field)上,指示WCF该属性或者字段能够被序列化传输。
用于自定错误异常的异常契约:Fault Contract
FaultContract用于自定义错误异常的处理方式,默认情况下,当服务端抛出异常的时候,客户端能接收到异常信息的描述,但这些描述往往格式统一,有时比较难以从中获取有用的信息,此时,我们可以自定义异常消息的格式,将我们关心的消息放到错误消息中传递给客户端,此时需要在方法上添加自定义一个错误消息的类,然后在要处理异常的函数上加上FaultContract,并将异常信息指示返回为自定义格式。
用于控制消息格式的消息契约: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的声明性编程模型甚是相似,比如在webservice中在类上标记WebServiceAttribute便可以将此类用于远程调用,而将方法添加WebMethondAttribute也可以将其暴露给远程客户端,这和WCF中的ServiceContract和OperationContract简直如出一辙,但不同的是,WCF中的契约要比Xml WebService中的要详尽的多,比如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
原文出处:
http://www.cnblogs.com/jillzhang/
发送短消息
查看公共资料
查找该会员全部帖子
UID:
1
精华:
46
威望:
102
金钱:
522.2 元
状态:
离线
<<
上一主题
|
下一主题
>>
1
/ 1 页
1
跳转
页
论坛跳转...
编程技巧共享
JAVA编程技巧共享
.NET编程技巧共享
WEB编程相关文章
互联网资源共享社区
商业智能共享
.NET源码共享
JAVA源码共享
开发工具共享
网页资料共享
教学资源共享
娱乐信息共享
精品游戏共享
老猫的理想信息区
技术交流区
业界新闻区
企业招聘
项目供求
广而告之
老猫的理想-共享社区站务区
站务管理
意见投诉
我的主题
我的帖子
我的精华
我的空间
帖子标题
空间日志
相册标题
作 者
我的主题
我的帖子
我的附件
我的精华
我的空间