WCF 第二章 契约 总结
2011-06-23 22:04 DanielWise 阅读(746) 评论(0) 编辑 收藏 举报这一章覆盖了非常多的契约背景,它们是互通性的基础。契约精确地描述了一个服务所能理解的消息。
WCF高度利用SOAP于契约定义中。特别的,它使用WSDL来描述服务终结点,使用XSD来描述数据。定义在WSDL中的服务操作用来在运行时把收到的请求转发给正确的.NET类。类似的,通过XSD契约定义的XML文件在运行时被反序列化成.NET类型而且发送给服务操作。合二为一,WSDL和XSD定义提供了对服务实现中的.NET类型一种基于标准的实现。
三种类型的契约的详细定义:
服务契约。服务契约描述了由服务实现的功能性操作。
数据契约。数据契约描述了服务通信所依赖的数据结构。一个数据契约把CLR类型序列化成XML并严格选择它们的数据成员。
消息契约。消息契约与类型化和非类型化数据且提供了对SOAP消息头和消息体的精确控制。
服务契约
服务契约定义了服务操作-服务类接口暴露的方法。它们给一个服务提供正式的WSDL接口。服务契约由[ServiceContract]和[OperationContract]属性定义。操作名字从类中继承而方法名可以在定义这些属性的时候被重载。服务契约支持三种消息交换模式:请求-回复,单向和双工。
请求-回复操作契约在客户端阻塞调用,在获得执行控制之前客户端会等待服务端操作完成。因此,它们仅应该被用于那么用户愿意等待反馈的相对快速的服务调用。在客户端,.NET异步调用模式可以应用在请求-回复消息交换模式来防止客户端在长时间的等待服务调用过程中被阻塞。
单向操作契约,就如名字暗示的,单向;它们不会向客户端返回结果。服务操作必须有一个空的返回值类型而且在[OperationContract]中被标记为[IsOneWay=true]。单向契约可以再任何传输协议中实现,包括MSMQ.
双向操作契约提供了最好的扩展性和性能因为它们在客户端和服务端有成对出现的请求和回复操作。在客户端和服务端捡来好双向信道以后,客户端和服务端都可以初始化一条消息。这回总模式非常适用于客户端通知。
数据契约
数据契约定义了服务的应用数据接口。标记为[DataContract]的类和[DataMember]的属性包含在XML元数据定义中,它们作为WSDL的一部分被用来表示服务契约。其他数据类型也可以在WSDL中暴露,比如基类类型和那些标记了[Serializable]的类型。因为[DataContract]为互通性设计了序列化规则,它是WCF中最好的序列化结构。
类成员通过[DataMember]属性包含到数据契约中。这是一种严格的选择模型所以只有使用了这个属性的成员才会包含在契约中。这也使得[DataContract]相对于[Serializable]称为一个更加适用的序列化结构,因为后者会导致内部结构暴露到服务外部。
支持类的层次结构而且它们的命名空间也通过这个层次结构被包括进来。为了支持多态和包含对象的集合,WCF使用一个服务来发布已知类型列表。数据契约也设计了版本化。当添加新成员到数据契约中,现有的客户端会继续工作,提供特殊规则是允许的。
消息契约
消息契约是允许访问到SOAP消息头和消息体的操作契约。消息可以使用[DataContract]或者[Serializable]来类型化,或者它们可以是简单的类型化消息。类型化消息由[MessageHeader]和[MessageBody]属性来定义。在设计阶段消息数据可以是未定义的,这提供了最大扩展性。非类型化消息也能访问SOAP消息头和消息体。
作者:DanielWise
出处:http://www.cnblogs.com/danielWise/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述