wcf服务编程ch5数据协定和消息协定.ppt_第1页
wcf服务编程ch5数据协定和消息协定.ppt_第2页
wcf服务编程ch5数据协定和消息协定.ppt_第3页
wcf服务编程ch5数据协定和消息协定.ppt_第4页
wcf服务编程ch5数据协定和消息协定.ppt_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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代码,将属性设置为要反序列化的值。对于将要生效的数据协定,它必须能序列化其所有数据成员。有关可序列化类型的完整列表,请参见数据协定序列化程序支持的类型。泛型类型的处理方式与非泛型类型完全相同。泛型参数无特殊要求。,数据协定,ServiceContractpublicinterfaceISampleInterfaceOperationContractSystem.Drawing.BitmapGetPicture(System.UripictureUri);OperationContractboolApprovePurchaseOrder(MyTypes.PurchaseOrderpo);,DataContractpublicclassPurchaseOrderprivateintpoId_value;DataMemberpublicintOrderIdget;set;IgnoreDataMemberpublicintOrderPwdget;set;,数据协定:其他约束,泛型或者自定义复杂嵌套类型必须成员全部能够被序列化时他本身才能够被序列化,DataContractpublicclassMyGenericType2DataMemberTtheData;,数据协定名称,有时,客户端和服务不共享相同的类型。他们仍然可以将数据传递给对方,只要数据合同是双方等效。完全限定的数据协定名称由命名空间和名称组成。数据成员只有名称,而没有命名空间。处理数据协定时,WCF基础结构对于命名空间以及数据协定和数据成员的名称区分大小写。,数据协定名称,数据协定命名采用同意资源标识符(URI)形式默认情况下是自己的命名空间名,但是可以通过设置DataContractAttribute的Namespace属性改写给定字段或属性的默认数据成员名称是该字段或属性的名称。若要重写默认值,请将DataMemberAttribute的Name属性设置为其他值。,数据协定:等效性,要使数据成员等效,其名称必须相同。此外,它们还必须表示同一类型的数据,也就是说,其数据协定必须等效。如果同一端(发送方或接收方)存在两种类型,而其数据协定又不等效(例如,它们的数据成员不同),则不应为它们指定相同的名称和命名空间。否则,可能会引发异常。,数据协定:等效性,数据成员顺序和数据协定等效性使用DataMemberAttribute类的Order属性可能会影响数据协定等效性。其成员必须以相同顺序出现,数据协定才能等效。默认顺序是按字母顺序。继承、接口和数据协定等效性确定等效性时,对于从其他数据协定继承的数据协定,将被视为一个包含所有基类型的数据成员的数据协定。,数据协定:等效性,以下是等效的,DataContractpublicclassCustomerDataMemberpublicstringfullName;DataMemberpublicstringtelephoneNumber;,DataContract(Name=Customer)publicclassPersonDataMember(Name=fullName)privatestringnameOfPerson;privatestringaddress;DataMember(Name=telephoneNumber)privatestringphoneNumber;,数据协定:等效性,以下是等效的,DataMemberpublicintX;DataMemberpublicintY;,DataMemberpublicintY;DataMemberpublicintX;,DataMember(Order=2)publicintY;DataMember(Order=1)publicintX;,DataMember(Order=1)publicintY;DataMember(Order=2)publicintX;,不等效,数据协定:已知类型,在数据到达接收终结点时,WCF运行库尝试将数据反序列化为公共语言运行库(CLR)类型的实例。通过首先检查传入消息选择为反序列化而实例化的类型,以确定消息内容遵循的数据协定。然后反序列化引擎尝试查找实现与消息内容兼容的数据协定的CLR类型。反序列化引擎在此过程中允许的侯选类型集称为反序列化程序的“已知类型”集。已知类型:发送的数据协定源自预期的数据协定要传输的声明类型是接口、不是类结果或枚举要传输的类型是OBJECT有些类型是具有上述类别之一成员类型的数据类型,如HashTable,数据协定:已知类型,让反序列化引擎了解某个类型的一种方法是使用KnownTypeAttribute。不能将属性应用于单个数据成员,只能将它应用于整个数据协定类型。将属性应用于可能为类或结构的“外部类型”。可以将多个KnownTypeAttribute属性应用于同一类型。,数据协定:版本管理,重大更改非重大更改对数据协定的更改可能是重大更改,也可能是非重大更改。对数据协定进行非重大更改时,使用较早版本协定的应用程序和使用较新版本协定的应用程序可以互相通信。另一方面,如果进行重大更改,则会阻止单向或双向通信对类型的任何更改,只要不影响其传输方式和接收方式,都是非重大更改,DataContractpublicclassPersonDataMemberprivatestringPhone;,DataContractpublicclassPersonDataMember(Name=Phone)privatestringTelephone;,非重大更改,数据协定:版本管理,下面的更改始终是重大更改:更改数据协定的Name或Namespace值。通过DataMemberAttribute的Order属性来更改数据成员的顺序。重命名数据成员。更改数据成员的数据协定。例如,将数据成员的类型从整数更改为字符串,或者从数据协定名称为“Customer”的类型更改为数据协定名称为“Person”的类型。添加或移除数据成员,消息协定,通常使用MessageContract定义,在需要精确控制将类型映射到网络传输的SOAP消息时使用最常见的做法是插入自定义SOAP头,MessageContractPublicclassBankingTranscationMessageHeaderPub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论