• 消息交换的双方,为了进行消息交换,而定义的一些数据交换规则,称之为契约.
  • 契约只约束规则,不管实现.
  • 契约对客户端和服务器的要求.
    • 服务器:定义和实现契约.构建ServiceHost实例,然后暴露EndPoint.同时打开通信信道.
    • 客户端:需要服务契约的一个副本和关于EndPoint的信息.为特定的EndPoint构建通信信道.然后就可以调用操作了.
    • 客户端和服务器之间共享契约,而非代码.
  • 服务契约
    • 可以应用到接口和类上.
    • 定义可用的操作和签名,即可被远程调用的类和操作.
    • 推荐应用到接口上.这样消除了服务实现的耦合,从而同一服务可以实现多个契约.
  • 参数契约
    • 实现不同编程语言通过SOAP的兼容访问.
    • 控制参数或者返回值的Name,把其他语言(Java)客户端发送的含有该Name标记的元素反序列化到该Name指定的参数上.
  • 序列化
    • [Serializable]:许多的CLR类型都可以序列化,其指定类内的所有域无论访问性如何都被序列化.无法对生成的SOAP元素的名称或类型进行控制(只能是变量名).
    • 数据契约.
      • 应用在DataContract上.

        • 在Schema与CLR类型之间转换(对于复杂类型应使用).
        • 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消息.
    • 应用
      • 作为操作参数或者返回值,必须包含可序列化成员.
      • 在生成的客户端代理中,自定义的消息头作为参数添加到操作中,在服务中,消息头和消息体都可用.

WCF之契约的更多相关文章

  1. 跟我一起学WCF(7)——WCF数据契约与序列化详解

    一.引言 在前面博文介绍到,WCF的契约包括操作契约.数据契约.消息契约和错误契约,前面一篇博文已经结束了操作契约的介绍,接下来自然就是介绍数据契约了.所以本文要分享的内容就是数据契约. 二.数据契约 ...

  2. WCF分布式开发步步为赢(7):WCF数据契约与序列化

    本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为 ...

  3. WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计

    上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...

  4. WCF之契约的分类(部分為參考他人)

    什么是契约呢?在使用WCF时,对其制定各种各样的规则,就叫做WCF契约.任何一个分布式的应用程序在传递消息的时候都需要实现制定一个规则. 任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定 ...

  5. (三)WCF之契约

    自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解).之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约 ...

  6. 菜鸟学习WCF笔记-契约(Contract)

    契约,契约确保了服务的正常调用,客户端以契约的方式进行服务端调用,而服务则需要按照契约规定的方式提供服务. 契约是服务提供的一组操作的描述 功能上讲:每个操作对应着某个具体的功能实现,以及调用这个操作 ...

  7. 有关WCF的契约问题

    WCF中的契约包括4种 数据契约 DataContract ->DataMember 服务契约 ServiceContract-> OperactionContract 消息契约 Mess ...

  8. wcf服务契约代理链

    意图:为了是客户端代理呈现出面向对象的多态的特征 a. 服务端 .契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继 ...

  9. wcf服务契约继承

    a. 服务端 .契约 使用了继承 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked ...

随机推荐

  1. 设备\Device\Harddisk1\DR1 有一个不对的区块

    近期遇到一个windows上的Oracle DB system表空间有问题.然后第一个反应就是查看windows的日志查看器,确实发现了报错: 设备\Device\Harddisk1\DR1 有一个不 ...

  2. SexyProgressBar

    https://github.com/sunalong/SexyProgressBar

  3. android环境部署(1.1)

    前言 对于android文件的解释和说明下载,这里分享一个博客大家了解吧.这里作者提供的下载地址可能有无效的,关键是解析..... 转自:http://www.cnblogs.com/bjzhangh ...

  4. iOS NSData

    NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上没资料的情况下,整理这个API文件好难,好艰辛.在这贡献给大家了,么么哒~示例程序用红色标注. ...

  5. 被淡忘的c#析构函数

    析构函数在C#中已经很少使用了,以至于很多人已经把它淡忘了,虽然用处不大,研究一下也无防.(原文:http://bbs.csdn.net/topics/300178463)一. 析构函数的特征:析构函 ...

  6. WPF 之 后台设置Image的Souce

    后台动态设置Image的Souce. 方法一: BitmapImage imgSource = new BitmapImage(new Uri("location",UriKind ...

  7. JS Date对象扩展

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  8. 九 AIDL

      多进程 多线程 优点 安全 稳定 扩大内存空间 节约CPU时间 AIDL=Android Interface definition language   使用情况:做一个下载,不想让你的下载拖垮你 ...

  9. [Android]天气App 2 项目搭建

       对于天气App,为了简化一些功能,暂时模仿MUUI系统提供的那个App.    本项目需要引入本人经常使用的一个工具库DroidTool,这个是本人根据工作中,收集到一些工具类,下载地址.    ...

  10. Shell学习笔记 - 循环语句

    一.for循环 1. 语法格式1 for 变量 in 值1 值2 值3 ... do 程序 done 说明:程序将遍历所有的值,赋值给变量,然后在执行程序.也就是说,后面接多少个值,程序就循环多少次. ...