zoukankan      html  css  js  c++  java
  • WCF 第二章 契约 总结

    这一章覆盖了非常多的契约背景,它们是互通性的基础。契约精确地描述了一个服务所能理解的消息。

    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消息头和消息体。

    ===============

    转载自

     

  • 相关阅读:
    图像处理检测方法 — SIFT和SURF
    代码题(31)— 有效的括号、括号生成、最长有效括号
    代码题(30)— 二叉搜索树、二叉树的最近公共祖先
    【angularjs】使用angular搭建项目,实现隔行换色
    【css3】nth-child
    【window】Windows10下为PHP安装redis扩展
    【css】3d导航效果
    【angularjs】使用angularjs模拟淘宝首页-淘宝头条滚动效果
    【js】横/纵向无缝滚动
    【angularjs】使用ionic+angular 搭建移动端项目,字体适配
  • 原文地址:https://www.cnblogs.com/llbofchina/p/2091405.html
Copyright © 2011-2022 走看看