• 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消息.
      • 应用
        • 作为操作参数或者返回值,必须包含可序列化成员.
        • 在生成的客户端代理中,自定义的消息头作为参数添加到操作中,在服务中,消息头和消息体都可用.
  • 相关阅读:
    Birt报表存储过程多选参数的设置
    jQuery UI AutoComplete的使用
    关于事件的简单优化
    Java编程思想(Chapter2、4、6)
    CSS层模型
    [转]Java并发编程:Lock
    Java多线程synchronized同步
    关于Thread.currentThread()和this的差异
    关于JavaScript闭包的小问题
    ReactiveCocoa(二)
  • 原文地址:https://www.cnblogs.com/robyn/p/3780268.html
Copyright © 2020-2023  润新知