wcf服务编程ch5数据协定和消息协定.ppt

上传人:sh****n 文档编号:6564625 上传时间:2020-02-29 格式:PPT 页数:23 大小:1.04MB
返回 下载 相关 举报
wcf服务编程ch5数据协定和消息协定.ppt_第1页
第1页 / 共23页
wcf服务编程ch5数据协定和消息协定.ppt_第2页
第2页 / 共23页
wcf服务编程ch5数据协定和消息协定.ppt_第3页
第3页 / 共23页
点击查看更多>>
资源描述
BF TECH4 0DNET软件开发工程师高薪就业品牌课程版权所有 北风网 使用WCF搭建企业通用架构讲师 石曼迪 第五章 数据协定和消息协定 目录 数据协定名称数据协定等效性数据协定版本管理 数据协定 数据协定 是在服务与客户端之间达成的正式协议 用于以抽象方式描述要交换的数据 也就是说 为了进行通信 客户端和服务不必共享相同的类型 而只需共享相同的数据协定 数据协定为每个参数或返回类型精确定义为进行交换而序列化哪些数据 将哪些数据转换为XML 必须为所创建的新复杂类型定义数据协定才能序列化这些类型 所有 NET基元类型以及CLR支持的其他类型均默认就支持可序列化协定 数据协定 正常情况下可通过将DataContractAttribute属性应用到该类型来完成该任务 可以将此属性应用到类 结构和枚举 然后必须将DataMemberAttribute属性应用到数据协定类型的每个成员 以指示这些成员为数据成员 即应进行序列化 可以使用IgnoreDataMemberAttribute从序列化中剔除某些成员 还可以使用DataContractAttribute和DataMemberAttribute属性显式创建数据协定 数据协定 仅当用于未标记的类型时 才接受IgnoreDataMemberAttribute属性 没有使用DataMemberAttribute的属性将不会被序列化 可以将DataMemberAttribute属性 Attribute 应用于字段和属性 Property 成员可访问性级别 internal private protected或public 对数据协定无任何影响 如果将DataMemberAttribute属性应用于静态成员 则将忽略该属性 在序列化期间 为属性数据成员调用property get代码来获取要序列化的属性的值 在反序列化期间 首先创建一个未初始化的对象 而不在该类型上调用任何构造函数 然后反序列化所有数据成员 在反序列化期间 为属性数据成员调用property set代码 将属性设置为要反序列化的值 对于将要生效的数据协定 它必须能序列化其所有数据成员 有关可序列化类型的完整列表 请参见数据协定序列化程序支持的类型 泛型类型的处理方式与非泛型类型完全相同 泛型参数无特殊要求 数据协定 ServiceContract publicinterfaceISampleInterface OperationContract System Drawing BitmapGetPicture System UripictureUri OperationContract boolApprovePurchaseOrder MyTypes PurchaseOrderpo DataContract publicclassPurchaseOrder privateintpoId value DataMember publicintOrderId get set IgnoreDataMember publicintOrderPwd get set 数据协定 其他约束 泛型或者自定义复杂嵌套类型必须成员全部能够被序列化时他本身才能够被序列化 DataContract publicclassMyGenericType2 DataMember TtheData 数据协定名称 有时 客户端和服务不共享相同的类型 他们仍然可以将数据传递给对方 只要数据合同是双方等效 完全限定的数据协定名称由命名空间和名称组成 数据成员只有名称 而没有命名空间 处理数据协定时 WCF基础结构对于命名空间以及数据协定和数据成员的名称区分大小写 数据协定名称 数据协定命名采用同意资源标识符 URI 形式默认情况下是自己的命名空间名 但是可以通过设置DataContractAttribute的Namespace属性改写给定字段或属性的默认数据成员名称是该字段或属性的名称 若要重写默认值 请将DataMemberAttribute的Name属性设置为其他值 数据协定 等效性 要使数据成员等效 其名称必须相同 此外 它们还必须表示同一类型的数据 也就是说 其数据协定必须等效 如果同一端 发送方或接收方 存在两种类型 而其数据协定又不等效 例如 它们的数据成员不同 则不应为它们指定相同的名称和命名空间 否则 可能会引发异常 数据协定 等效性 数据成员顺序和数据协定等效性使用DataMemberAttribute类的Order属性可能会影响数据协定等效性 其成员必须以相同顺序出现 数据协定才能等效 默认顺序是按字母顺序 继承 接口和数据协定等效性确定等效性时 对于从其他数据协定继承的数据协定 将被视为一个包含所有基类型的数据成员的数据协定 数据协定 等效性 以下是等效的 DataContract publicclassCustomer DataMember publicstringfullName DataMember publicstringtelephoneNumber DataContract Name Customer publicclassPerson DataMember Name fullName privatestringnameOfPerson privatestringaddress DataMember Name telephoneNumber privatestringphoneNumber 数据协定 等效性 以下是等效的 DataMember publicintX DataMember publicintY DataMember publicintY DataMember publicintX DataMember Order 2 publicintY DataMember Order 1 publicintX DataMember Order 1 publicintY DataMember Order 2 publicintX 不等效 数据协定 已知类型 在数据到达接收终结点时 WCF运行库尝试将数据反序列化为公共语言运行库 CLR 类型的实例 通过首先检查传入消息选择为反序列化而实例化的类型 以确定消息内容遵循的数据协定 然后反序列化引擎尝试查找实现与消息内容兼容的数据协定的CLR类型 反序列化引擎在此过程中允许的侯选类型集称为反序列化程序的 已知类型 集 已知类型 发送的数据协定源自预期的数据协定要传输的声明类型是接口 不是类结果或枚举要传输的类型是OBJECT有些类型是具有上述类别之一成员类型的数据类型 如HashTable 数据协定 已知类型 让反序列化引擎了解某个类型的一种方法是使用KnownTypeAttribute 不能将属性应用于单个数据成员 只能将它应用于整个数据协定类型 将属性应用于可能为类或结构的 外部类型 可以将多个KnownTypeAttribute属性应用于同一类型 数据协定 版本管理 重大更改非重大更改对数据协定的更改可能是重大更改 也可能是非重大更改 对数据协定进行非重大更改时 使用较早版本协定的应用程序和使用较新版本协定的应用程序可以互相通信 另一方面 如果进行重大更改 则会阻止单向或双向通信对类型的任何更改 只要不影响其传输方式和接收方式 都是非重大更改 DataContract publicclassPerson DataMember privatestringPhone DataContract publicclassPerson DataMember Name Phone privatestringTelephone 非重大更改 数据协定 版本管理 下面的更改始终是重大更改 更改数据协定的Name或Namespace值 通过DataMemberAttribute的Order属性来更改数据成员的顺序 重命名数据成员 更改数据成员的数据协定 例如 将数据成员的类型从整数更改为字符串 或者从数据协定名称为 Customer 的类型更改为数据协定名称为 Person 的类型 添加或移除数据成员 消息协定 通常使用MessageContract定义 在需要精确控制将类型映射到网络传输的SOAP消息时使用最常见的做法是插入自定义SOAP头 MessageContract PublicclassBankingTranscation MessageHeader PublicOperationoperation MessageHeader PublicDateTimetransactionDate MessageBodyMember PrivateAccountsourceAccount 现场编程 消息协定的简单使用 总结 数据协定等效性版本管理消息协定 WCF视频教程 使用WCF搭建企业通用架构学习地址 欢迎访问我们的官方网站
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!