zoukankan      html  css  js  c++  java
  • WCF之契约

    • 消息交换的双方,为了进行消息交换,而定义的一些数据交换规则,称之为契约.
    • 契约只约束规则,不管实现.
    • 契约对客户端和服务器的要求.
      • 服务器:定义和实现契约.构建ServiceHost实例,然后暴露EndPoint.同时打开通信信道.
      • 客户端:需要服务契约的一个副本和关于EndPoint的信息.为特定的EndPoint构建通信信道.然后就可以调用操作了.
      • 客户端和服务器之间共享契约,而非代码.
    • 服务契约
      • 可以应用到接口和类上.
      • 定义可用的操作和签名,即可被远程调用的类和操作.
      • 推荐应用到接口上.这样消除了服务实现的耦合,从而同一服务可以实现多个契约.
    • 参数契约
      • 实现不同编程语言通过SOAP的兼容访问.
      • 控制参数或者返回值的Name,把其他语言(Java)客户端发送的含有该Name标记的元素反序列化到该Name指定的参数上.
    • 序列化
      • [Serializable]:许多的CLR类型都可以序列化,其指定类内的所有域无论访问性如何都被序列化.无法对生成的SOAP元素的名称或类型进行控制(只能是变量名).
      • 数据契约.
        • 应用在DataContract上.
          • SchemaCLR类型之间转换(对于复杂类型应使用).
          • WS规范要求使用Schema来表示命名空间,NameSpace,还可以显示的设置Name.
        • 应用在DataMember上.
          • 明确成员(属性或域)是否参与序列化。
          • 可使用Order来指定顺序,可指定Name作为在SOAP中的名称,推荐对属性而非域进行设置.
      • IXMLSerializable
        • 支持Contract First,WSDL和原数据交换提供了XSD Schema.
        • 需要编写XML与业务对象之间的映射关系。
        • 开销上小于使用数据契约。
        • 在服务契约中验证.
      • 数据契约和其他可序列化契约,用于自定义数据结构.
    • KnowType已知类型
      • 在WCF中,为了实现SOA,牺牲了一些OO的特性,如多态和继承.
      • 使用已知类型来实现多态.
      • KnowType只能应用在DataContract的基类上.
      • 而ServiceKownType可以应用在接口,方法,类上.
    • 编码
      • Code First:丢失SOA特性.契约要受到代码限制.
      • Contract First:根据面向服务的契约编码,实现了C/S间的松耦合性.
    • 消息契约
      • 用于自定义消息.控制消息头(MessageHeader)和消息体(MessageBodyMember).
      • 应用在消息体上,可以有多个.相当于操作有多个参数.这是返回多个复杂类型数据的唯一方法.
      • 用途
        • 添加自定义头.
        • 控制消息是否被包装(IsWrapped).
        • 控制签名与加密(ProtectionLevel).
        • 将一个类型转换为SOAP消息.
      • 应用
        • 作为操作参数或者返回值,必须包含可序列化成员.
        • 在生成的客户端代理中,自定义的消息头作为参数添加到操作中,在服务中,消息头和消息体都可用.
  • 相关阅读:
    【NOIP2007】守望者的逃离
    20200321(ABC)题解 by 马鸿儒 孙晨曦
    20200320(ABC)题解 by 王一帆
    20200319(ABC)题解 by 王一帆 梁延杰 丁智辰
    20200314(ABC)题解 by 董国梁 蒋丽君 章思航
    20200309(ABC)题解 by 梁延杰
    20200307(DEF)题解 by 孙晨曦
    20200306(ABC)题解 by 孙晨曦
    20200305(DEF)题解 by 孙晨曦
    20200303(ABC)题解 by 王锐,董国梁
  • 原文地址:https://www.cnblogs.com/robyn/p/3780268.html
Copyright © 2011-2022 走看看