WCF之契约
- 消息交换的双方,为了进行消息交换,而定义的一些数据交换规则,称之为契约.
- 契约只约束规则,不管实现.
- 契约对客户端和服务器的要求.
- 服务器:定义和实现契约.构建ServiceHost实例,然后暴露EndPoint.同时打开通信信道.
- 客户端:需要服务契约的一个副本和关于EndPoint的信息.为特定的EndPoint构建通信信道.然后就可以调用操作了.
- 客户端和服务器之间共享契约,而非代码.

- 服务契约
- 可以应用到接口和类上.
- 定义可用的操作和签名,即可被远程调用的类和操作.
- 推荐应用到接口上.这样消除了服务实现的耦合,从而同一服务可以实现多个契约.
- 参数契约
- 实现不同编程语言通过SOAP的兼容访问.
- 控制参数或者返回值的Name,把其他语言(Java)客户端发送的含有该Name标记的元素反序列化到该Name指定的参数上.
- 序列化
- [Serializable]:许多的CLR类型都可以序列化,其指定类内的所有域无论访问性如何都被序列化.无法对生成的SOAP元素的名称或类型进行控制(只能是变量名).
- 数据契约.
- 应用在DataContract上.
- 在Schema与CLR类型之间转换(对于复杂类型应使用).
- WS规范要求使用Schema来表示命名空间,即NameSpace,还可以显示的设置Name.
- 应用在DataMember上.
- 明确成员(属性或域)是否参与序列化。
- 可使用Order来指定顺序,可指定Name作为在SOAP中的名称,推荐对属性而非域进行设置.
- 应用在DataContract上.
- 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之契约的更多相关文章
- 跟我一起学WCF(7)——WCF数据契约与序列化详解
一.引言 在前面博文介绍到,WCF的契约包括操作契约.数据契约.消息契约和错误契约,前面一篇博文已经结束了操作契约的介绍,接下来自然就是介绍数据契约了.所以本文要分享的内容就是数据契约. 二.数据契约 ...
- WCF分布式开发步步为赢(7):WCF数据契约与序列化
本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为 ...
- WCF分布式开发步步为赢(6):WCF服务契约继承与分解设计
上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依 ...
- WCF之契约的分类(部分為參考他人)
什么是契约呢?在使用WCF时,对其制定各种各样的规则,就叫做WCF契约.任何一个分布式的应用程序在传递消息的时候都需要实现制定一个规则. 任何一个分布式应用程序,它之所以能够互相传递消息,都是事先制定 ...
- (三)WCF之契约
自从我们接收ITOO项目之后,就必须跟WCF打交道,既然必须直面WCF,我就对WCF进行了研究(还不是很深入,是自己目前的理解).之前对WCF的一些基础知识进行了简单的介绍,本篇重点来介绍WCF的契约 ...
- 菜鸟学习WCF笔记-契约(Contract)
契约,契约确保了服务的正常调用,客户端以契约的方式进行服务端调用,而服务则需要按照契约规定的方式提供服务. 契约是服务提供的一组操作的描述 功能上讲:每个操作对应着某个具体的功能实现,以及调用这个操作 ...
- 有关WCF的契约问题
WCF中的契约包括4种 数据契约 DataContract ->DataMember 服务契约 ServiceContract-> OperactionContract 消息契约 Mess ...
- wcf服务契约代理链
意图:为了是客户端代理呈现出面向对象的多态的特征 a. 服务端 .契约 实现了契约的继承这个在服务端是一点问题没有,因为oprationcontract可以继承,虽然DataContract不能实现继 ...
- wcf服务契约继承
a. 服务端 .契约 使用了继承 using System; using System.ServiceModel; namespace WCF.Chapter2.InheritanceReworked ...
随机推荐
- iOS-swift环形进度指示器+图片加载动画
demo.gif 如图,这个动画的是如何做的呢? 分析: 1.环形进度指示器,根据下载进度来更新它 2.扩展环,向内向外扩展这个环,中间扩展的时候,去掉这个遮盖 一.环形进度指示器 1.自定义View ...
- DQS安装失败——系统重新引导是否处于挂起状态
问题: 安装完SQL Server 2012后,准备安装DQS服务,但是总是提示:操作"检查系统重新引导是否处于挂起状态"已完成,但有错误,正在中止安装.非常无奈, ...
- C#“同步调用”、“异步调用”、“异步回调”
本文将主要通过“同步调用”.“异步调用”.“异步回调”三个示例来讲解在用委托执行同一个“加法类”的时候的的区别和利弊. 首先,通过代码定义一个委托和下面三个示例将要调用的方法: ); //模拟该方法运 ...
- php调试工具总结
一:XDebug+Webgrind 二:XHProf
- 小白日记49:kali渗透测试之Web渗透-XSS(三)-存储型XSS、DOM型XSS、神器BEFF
存储型XSS与DOM型XSS [XSS原理] 存储型XSS 1.可长期存储于服务器端 2.每次用户访问都会被执行js脚本,攻击者只需侦听指定端口 #攻击利用方法大体等于反射型xss利用 ##多出现在留 ...
- kafka java客户端编程
kafka_2.10-0.8.1.1 maven <dependencies> <dependency> <groupId>org.apache.kafka< ...
- flume1.5.2安装与简介
关于flume的简介看参考:http://www.aboutyun.com/thread-7415-1-1.html 其实一张图就简单明了了 简单安装: 1.下载解压 ... 2.配置JDK,flum ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- 结合源码看nginx-1.4.0之nginx全局变量ngx_cycle初始化详解
目录 0. 摘要 1. ngx_cycle_t结构设计 2. ngx_cycle_t数据结构 3. nginx全局变量ngx_cycle初始化 4. 小结 5. 参考资料 0. 摘要 Nginx核心的 ...
- jQery无缝滚动效果
思路: 赋值所有li,添加到ul末尾,重新计算ul宽度 每次移动一个固定的值,当超出一半时,将ul拉回原位 以下代码 <!DOCTYPE html> <html> <he ...