《数据契约》PPT课件

上传人:re****.1 文档编号:587500686 上传时间:2024-09-06 格式:PPT 页数:34 大小:2.91MB
返回 下载 相关 举报
《数据契约》PPT课件_第1页
第1页 / 共34页
《数据契约》PPT课件_第2页
第2页 / 共34页
《数据契约》PPT课件_第3页
第3页 / 共34页
《数据契约》PPT课件_第4页
第4页 / 共34页
《数据契约》PPT课件_第5页
第5页 / 共34页
点击查看更多>>
资源描述

《《数据契约》PPT课件》由会员分享,可在线阅读,更多相关《《数据契约》PPT课件(34页珍藏版)》请在金锄头文库上搜索。

1、南京工业职业技术学院数据契约和序列化数据契约和序列化蒋美云南京工业职业技术学院可序列化类型数据契约已知类型(Known types)IXmlSerializable本课程内容:本课程内容:南京工业职业技术学院在分布式系统中,一个Application与另一个Application之间进行交互,必然需要携带数据。在服务内部,功能由代码实现,而在服务外部,功能由WSDL定义,WCF服务内部程序的数据由简单与复杂类型,而在服务外部,数据由XSD(XML Schema Definitions)表示。数据契约的作用:类型与XSD之间进行映射。映射成XSD后随WSDL一起发布。序列化可以理解成这种关系的映

2、射。Serialization可以看成是把包含相同内容的数据从一种结构 (.NET Object) 转换成另一种结构 (XML) 。要实现在两种不同结构之间的转化,这两种结构之间必须存在一种Mapping(映射)。Serialization的实现由序列化器(Serializer)来负责。为什么要序列化为什么要序列化南京工业职业技术学院WCF序列化将对象图转化为XML信息集的过程。将CLR类型转化成符合标准的XML序列化序列化南京工业职业技术学院满足下列条件之一将被DataContractSerializer序列化:标记有 DataContract和DataMember属性具有Collectio

3、nDataContract属性由IXMLSerializable派生;标记有Serializable属性,而成员未标记NonSerialized标记有Serializable,并实现了Iserializable接口;CLR内建基本类型,如int,stringBytes array、DateTime、等数组或容器枚举什么样的数据会被序列化?什么样的数据会被序列化?南京工业职业技术学院Serialization 是通过Serializer来完成的,在WCF中,有3种不同的SerializerDataContractSerializer(定义在System.RunTime.Serializtion

4、namespace中)XMLSerializer(定义在System.XML.Serialization namespace)NetDataContractSerializer (定义在System.XML.Serialization namespace) 。他们用不同的方式实现.NET Object的Serialization。DataContractSerializer和NetDataContractSerializer基本上没有太大的区别,其中DataContractSerializer为WCF默认的Serializer,如果没有显式定义采用另外一种Serializer,WCF会创建一个

5、DataContractSerializer 序列化NET Object。WCFWCF中序列化方式中序列化方式南京工业职业技术学院WCFWCF中序列化方式中序列化方式南京工业职业技术学院所有域都被序列化 无论可访问性(accessibility)如何无法对命名规范或者数据类型进行控制不想系列化某个成员,可以在该成员上添加Nonserializable特性SerializableAttributeSerializableAttribute(传统的)(传统的)南京工业职业技术学院为了获得最大可能的互操作性,建议使用DataContractAttribute 和DataMemberAttribute

6、 属性对类型进行标记,以创建数据协定。数据协定是服务协定的一部分,用于描述服务操作交换的数据。对于复杂类型,使用DataContractSerializer是一种较好的方法数据契约(数据契约(Data ContractsData Contracts)概述)概述: :序序列化中常用的一种方式列化中常用的一种方式南京工业职业技术学院数据契约(数据契约(Data ContractsData Contracts)概述)概述南京工业职业技术学院数据契约(数据契约(Data ContractsData Contracts)概述)概述南京工业职业技术学院创建数据契约创建数据契约南京工业职业技术学院 Data

7、Contract public class People DataMember public string name; DataMember public int age; public People(string name,int age) this.name = name; this.age = age; ServiceContract public interface IService1 OperationContract string GetInfomation(People people);数据契约数据契约枚举DataContractenum ContactType EnumMemb

8、er Customer; EnumMember Vendor; 1.枚举也可以不序列化直接使用,如果需要添加服务应用或用需要序列化2.需要只发布部分枚举成员的时候才需要使用DataContractAttribute和EnumMemberAttribute属性,否则就采用缺省的契约(不应用任何属性)来包含全部枚举成员3.可以通过应用NonSerializedAttributed来排除不希望被序列化的枚举成员南京工业职业技术学院提供命名空间(Namespace)能够提供显式的NameDataContractAttribute DataContractAttribute 参考书本参考书本p5253p

9、5253南京工业职业技术学院可以指定排列顺序 缺省按照字母表顺序排列能够显式提供Name, IsRequired(表示是不是为空,如IsRequired=true,表示Name在序列化之前必须要被赋值,不为空)DataMemberAttributeDataMemberAttribute南京工业职业技术学院Data Contract SchemaData Contract Schema按照字母顺序排序(缺省)按照字母顺序排序(缺省)南京工业职业技术学院数据契约是可选的样式协定:除非显式应用数据协定属性,否则不会序列化任何类型或数据成员数据协定与托管代码的访问范围无关:可以对私有数据成员进行序列化

10、,并将其发送到其他位置,以便可以公开访问它们数据契约数据契约南京工业职业技术学院数据协定名称数据协定名称南京工业职业技术学院数据协定等效性书本数据协定等效性书本p60p60南京工业职业技术学院数据协定等效性数据协定等效性南京工业职业技术学院V1版 DataContract public class People DataMember public string name; DataMember public int age; DataMember public int grade; 数据协定等效性数据协定等效性- -对数据契约的非破坏对数据契约的非破坏性更改性更改V2版 DataContrac

11、t public class People DataMember public string name; DataMember public int age; DataMember public string id; 在使用添加服务引用和添加代理时,具有扩展功能。也即,代理类根据V1生成,而后服务升级到V2版本,可以用v1版契约调用v2版服务南京工业职业技术学院数据协定等效性数据协定等效性南京工业职业技术学院数据协定等效性数据协定等效性南京工业职业技术学院书本p54类之间的继承关系定义类的层次结构定义类的层次结构南京工业职业技术学院用Known types属性在WSDL中发布其他数据类型(需要

12、强制包含某些类型)已知类型(Known types)允许在服务契约中使用多态的行为KnownType用法: KnownType(typeof(类型)应用场景数据契约上: 1)一个序列化的派生类被发送到端点,而希望得到序列化的基类,WCF无法知道,因为基类可能不是契约的一部分;(基类的实例可以引用该基类多个派生类的实例,没加KnownType不会被反序列化)DataContract KnownType(typeof(派生类)基类)2)hashtable类,存储的元素是其他类(p56) 在服务操作中暴露基本类型 将已知类型(known types)相关到 基本类型(基类类型)自身 特定操作 整个服

13、务契约 采用属性声明或者配置的方式来实现已知类型(已知类型(Known TypesKnown Types)南京工业职业技术学院KnownTypeAttributeKnownTypeAttribute南京工业职业技术学院ServiceKnownTypeAttribute特性,可以使用在服务契约上,也可以应用在服务契约的操作方法上。P58,注意57页下文字而KnowType仅能用在数据契约的基类上。ServiceKnownTypeAttributeServiceKnownTypeAttribute南京工业职业技术学院ServiceKnownTypeAttributeServiceKnownType

14、Attribute南京工业职业技术学院南京工业职业技术学院ServiceKnownTypeServiceKnownType南京工业职业技术学院配置文件中使用配置文件中使用KnownTypeKnownType南京工业职业技术学院在完美的WCF世界中: 创建同业务对象描述相同功能的数据契约 暴露在服务契约中在现实世界中: 可能无法拥有对象(不可序列化) 业务对象的实例化可能不正确 可能需要对现存的schema进行支持Code-FirstCode-First与与Contract-FirstContract-First南京工业职业技术学院这是asmx采用的SerializerIXmlSerializableIXmlSerializable南京工业职业技术学院消息契约(消息契约(Message ContractsMessage Contracts)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号