WCF数据契约】的更多相关文章

一.引言 在前面博文介绍到,WCF的契约包括操作契约.数据契约.消息契约和错误契约,前面一篇博文已经结束了操作契约的介绍,接下来自然就是介绍数据契约了.所以本文要分享的内容就是数据契约. 二.数据契约的介绍 在WCF中,服务契约定义了可供调用的服务操作方法,而数据契约则是定义了服务端和客户端之间传送的自定义类型,在WCF项目中,必不可少地是传递数据,把客户端需要传递的数据传送到服务中,服务接收到数据再对其进行处理.然而在WCF中,传递的类型必须标记为DataContractAttribute属性…
本节继续学习WCF分布式开发步步为赢(7):WCF数据契约与序列化.数据契约是WCF应用程序开发中一个重要的概念,毫无疑问实现客户端与服务端数据契约的传递中序列化是非常重要的步骤.那么序列化是什么?为什么会有序列化机制?或者说它是为了解决什么问题?作用是什么?现有的.NET 序列化机制和WCF序列化机制有什么不同?我们在本节文章里都会详细介绍.本节结构:[0]数据契约[1]序列化基本概念[2].NET 序列化机制[3]WCF序列化机制[4]代码实现与分析[5]总结. 下面我们正式进入今天的学习阶…
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示. [DataContract] public class UserInfo { //…. } 只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递.WCF对声明为DataContract的类型提供更加细节的控制,可以把一个成员排除在序列化范围以外,…
当使用DataMember时,和访问符无关,及时使用了private,成员都是可见的.相反如果使用static,为不可见. 上述的两个数据成员是等效的,如果是等效的话 数据成员的顺序也必须是相同的. 4.数据契约已知类型——使用KownType特性. 因为数据类型都是在服务端协定好的,客户端为了兼容多种数据类型,所以可能参数为"比较大的类”(通常是基类)会使用KownType特性,以达到 发送的数据契约类型是从接收端期望接收的数据契约类型继承 的目的. 客户端代码: 下面是客户端参数: stat…
using Bll; using System; using System.CodeDom; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.Serialization; using System.ServiceModel…
上一节我们学习了WCF分布式开发步步为赢(5)服务契约与操作重载部分.今天我们来继续学习WCF服务契约继承和服务分解设计相关的知识点.WCF服务契约继承有何优势和缺点?实际项目里契约设计有什么原则和依据?面向对象的设计经验有何值得借鉴的地方?这里我们会一一给出详细的介绍.本文首先介绍的是WCF服务中契约继承的一些概念.例子代码分析,其次来讲解服务契约的设计问题.首先介绍的也是进行服务设计的必要性,服务设计的原则,示例代码分析.最后是全文的总结部分.结构如下:[1]OO面向对象设计原则,[2]服务…
转载地址:http://www.zhuli8.com/wcf/EnumMember.html 枚举类型的定义总是支持序列化的.当我们定义一个新的枚举时,不必应用DataContract特性,就可以在数据契约中使用它.数据契约隐式地包含了枚举对象的所有值. enum ContactType { Customer, Vendor, Partner } [DataContract] struct Contact { [DataMember] public ContactType ContactType…
一.数据契约 1.使用数据协定可以灵活控制哪些成员应该被客户端识别. [DataContract] public class Employee { [DataMember] public string Name { get; set; } [DataMember] public int Age { get; set; } [DataMember] public string City { get; set; } } [ServiceContract] public interface IServ…
从抽象层面看,WCF能够托管CLR类型(接口和类)并将它们公开为服务,也能够以本地CLR接口和类的方式使用服务.然而,CLR类型却属于.NET的特定技术.由于面向服务的一个核心原则就是在跨越服务边界时,服务不能够暴露它们的实现技术.因此,不管客户端采用了何种技术,它都能够与服务交互.使用基于XML的样式或信息集(Infoset)实现CLR数据类型与标准的与平台无关的表示形式之间的转换.此外,服务需要一种正式的方法声明两者之间的转换,这就是契约. Serializable所指代的涵义是类型的所有成…
本篇博文只是简单说下WCF中的契约的种类.作用以及一些简单的代码示例.在WCF中契约分为服务契约.数据契约和消息契约.下面对这几种契约进行简单的介绍. 服务契约 服务契约描述了暴露给外部的类型(接口或类).服务所支持的操作.使用的消息交换模式和消息的格式.每个WCF服务必须实现至少一个服务契约.使用服务契约必须要引用命名空间System.ServiceModel .服务契约中常用到的三个特性: ServiceContractAttribute 该特性定义在类或接口上,用来描述一个相关操作的集合.…
原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]如果一个类型,不一定是数据契约,和给定的数据契约具有很大的差异,而我们要将该类型的对象序列化成基于数据契约对应的XML.反之,对于一段给定的基于数据契约的XML,要通过反序列化生成该类型的对象,我们该如何实现这样的场景? 比如下面定义了两个类型Contact和Customer,…
原文:WCF技术剖析之十六:数据契约的等效性和版本控制 数据契约是对用于交换的数据结构的描述,是数据序列化和反序列化的依据.在一个WCF应用中,客户端和服务端必须通过等效的数据契约方能进行有效的数据交换.随着时间的推移,不可避免地,我们会面临着数据契约版本的变化,比如数据成员的添加和删除.成员名称或者命名空间的修正等,如何避免数据契约这种版本的变化对客户端现有程序造成影响,就是本节着重要讨论的问题. 一.数据契约的等效性 数据契约就是采用一种厂商中立.平台无关的形式(XSD)定义了数据的结构,而…
原文:WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NET中,所有的集合都实现了IEnumerable接口,比如Array.Hashtable.ArrayList.Stack.Queue等.有的集合要求元素具有相同的类型,这种集合一般通过泛型的方式定义,它们实现另一个接口IEnumerable<T>(IEnumerable<T>本身继承自I…
原文:WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]大部分的系统都是以数据为中心的(Data Central),功能的实现表现在对相关数据的正确处理.而数据本身,是有效信息的载体,在不同的环境具有不同的表示.一个分布式的互联系统关注于数据的交换,而数据正常交换的根本前提是参与数据交换的双方对于数据结…
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示. [DataContract] public  class UserInfo { //…. } 只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递.WCF对声明为DataContract的类型提供更加细节的控制,可以把一个成员排除在序列化范围以外…
WCF中传输的数据不想传统的面向对象编程,它只传递了一些对象的属性,但是自身并不知道自己属于什么对象,所以,他没有子类和父类的概念,因而也就没有Is-a的关系,所以在WCF中,如果想维持这种继承关系,就需要做一些特殊的处理了. 假设有如下定义, namespace KnownTypeExampleInterface{    [DataContract]    public class Employee    {        [DataMember]        public string N…
前面几篇讲的都只能传递string类型的简单参数,数据契约就是用来解决如传递一个带有多个属性的Class类型的对象的. WCF推荐使用数据契约的方式实现数据的序列化.这部分的内容很好理解但是很重要,先看[DataContract]和[DataMember]这两个就是数据契约的标记,他们在System.Runtime.Serialization命名空间下. 1.[DataContract]:它用来实现Schema与CLR类型之间的转换.总是要提供命名空间,Web Service的规范要求使用“Sc…
上一篇:WCF把书读薄(2)——消息交换.服务实例.会话与并发 十二.数据契约 在实际应用当中数据不可能仅仅是以int Add(int num1, int num2)这种简单的几个int的方式进行传输的,而是要封装成相对复杂的Request/Response对象,即用我们自定义的类来进行消息的传输,那么就需要一种规则来序列化/反序列化我们自己的对象成为某种标准格式.WCF可以通过数据契约来完成这一过程,WCF使用的序列化器是DataContractSerializer. 在一个类上打上DataC…
WCF序列化流程 序列化 默认用户自定义类型(类和结构)并不支持序列化,因为.NET无法判断对象状态是否需要反射到流. 用户自定义类的实例支持序列化 需要添加[Serialazable].若要允许可序列化类型包含非序列化的成员变量可使用[NonSerializad] .Net格式器 BinaryFormatter 序列化为二进制格式 SoapFormatter 使用.NET 特定的SOAP XMl格式 两者格式器都实现IFormatter接口 两种格式器都要将类型的程序集及版本控制器信息持久化到…
WCF 数据结构中返回的只读属性 TotalCount 也需要声明 Set 方法. [DataContract]public class BookShelfDataModel{    public BookShelfDataModel()     {         BookList = new List<BookDataModel>();     }     [DataMember]     public List<BookDataModel> BookList { get; s…
原文地址:http://www.cnblogs.com/Gavinzhao/archive/2010/06/01/1748736.html 服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示. [DataContract] public class UserInfo { //…. } 只有声明为DataContract的类型的对象可以被传送,且只…
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示. [DataContract] public class UserInfo { //…. } 只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递.WCF对声明为DataContract的类型提供更加细节的控制,可以把一个成员排除在序列化范围以外,…
数据协定概念 “数据协定”是在服务与客户端之间达成的正式协议,用于以抽象方式描述要交换的数据. 也就是说,为了进行通信,客户端和服务不必共享相同的类型,而只需共享相同的数据协定. 数据协定为每一个做数据交换时需要被序列化的参数或者返回值做了精确定义. 数据协定特点 默认情况下, WCF使用称为数据协定序列化程序的序列化引擎对数据进行序列化和反序列化(与 XML 进行相互转换). 所有 .NET Framework 基元类型(如整型和字符串型)以及某些被视为基元的类型(如 DateTime 和 X…
数据协定等效性特点概述 对于客户端要将某种类型的数据成功发送到服务,或者服务要将数据成功发送到客户端的情况,接收端上并不一定必须存在此发送数据类型. 唯一的要求是两种类型的数据协定应该等效. 要使数据协定等效,其命名空间和名称必须相同. 此外,某一端上的每个数据成员还必须在另一端上具有等效的数据成员.注意,数据协定名称和命名空间以及数据成员名称均区分大小写. 要使数据成员等效,其名称必须相同. 此外,它们还必须表示同一类型的数据,也就是说,其数据协定必须等效. 如果同一端(发送方或接收方)存在两…
KnownTypeAttribute 类概述 在数据到达接收终结点时,WCF 运行库尝试将数据反序列化为公共语言运行库 (CLR) 类型的实例.通过首先检查传入消息选择为反序列化而实例化的类型,以确定消息内容遵循的数据协定.然后反序列化引擎尝试查找实现与消息内容兼容的数据协定的 CLR 类型.反序列化引擎在此过程中允许的侯选类型集称为反序列化程序的“已知类型”集. 让反序列化引擎了解某个类型的一种方法是使用 KnownTypeAttribute.不能将属性应用于单个数据成员,只能将它应用于整个数…
契约,契约确保了服务的正常调用,客户端以契约的方式进行服务端调用,而服务则需要按照契约规定的方式提供服务. 契约是服务提供的一组操作的描述 功能上讲:每个操作对应着某个具体的功能实现,以及调用这个操作的输入和输出. 消息交换层面上讲:每个操作定义了所采用的消息交换模式和消息本身的结构. WCF支持请求-恢复,单向,双工三种消息交换模式,其中前面两种是基本的消息交换模式,是可以直接在操作中进行描述的,双工模式的消息交换可以看成是这两种基本消息交换模式的组合. 如果按照双工模式进行消息交换,则意味着…
消息交换的双方,为了进行消息交换,而定义的一些数据交换规则,称之为契约. 契约只约束规则,不管实现. 契约对客户端和服务器的要求. 服务器:定义和实现契约.构建ServiceHost实例,然后暴露EndPoint.同时打开通信信道. 客户端:需要服务契约的一个副本和关于EndPoint的信息.为特定的EndPoint构建通信信道.然后就可以调用操作了. 客户端和服务器之间共享契约,而非代码. 服务契约 可以应用到接口和类上. 定义可用的操作和签名,即可被远程调用的类和操作. 推荐应用到接口上.这…
WCF中的契约包括4种 数据契约 DataContract ->DataMember 服务契约 ServiceContract-> OperactionContract 消息契约 MessageContract 异常契约 FaultContract 用于定义服务操作的服务WCF契约:Service Contract 这种级别的契约又包括两种:ServiceContract和OperationContract ServiceContract用于类或者结构上,用于指示WCF此类或者结构能够被远程调…
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示. [DataContract] public class UserInfo { //…. } 只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递.WCF对声明为DataContract的类型提供更加细节的控制,可以把一个成员排除在序列化范围以外,…
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所示. [DataContract] public class UserInfo { //…. } 只有声明为DataContract的类型的对象可以被传送,且只有成员属性会被传递,成员方法不会被传递.WCF对声明为DataContract的类型提供更加细节的控制,可以把一个成员排除在序列化范围以外,…