代码改变世界

WCF 第六章 序列化和编码 大数据流

2010-12-21 17:19 by DanielWise, 1415 阅读, 1 推荐, 收藏, 编辑
摘要:WCF支持两种消息处理模式: 缓冲和流模式。缓冲是WCF中处理消息的默认模式。在这个模式下,整个消息在发送和接收之前被放入内存中。在大多数场景,缓冲消息是重要的而且有时需要支持一些诸如可信赖消息和数字签名的特性。然而,缓冲大消息将很容易导致系统资源耗尽并限制可扩展性。WCF支持另外一种使用流处理消息的模式。在这个模式中,在客户端和服务端的数据使用一个System.IO.Stream.Streaming。流模式一般在一个绑定或一个传输信道上使用。列表6.29 显示了如何在绑定配置中通过设置transferMode属性在netTcpBinding绑定打开流处理。transferMode属性的可以使 阅读全文

WCF 第六章 序列化和编码 使用代理序列化类型

2010-12-21 14:37 by DanielWise, 794 阅读, 0 推荐, 收藏, 编辑
摘要:有时你可能需要完成一个不可序列化或者需要对序列化内容进行改变的序列化过程。一个例子是由第三方组件提供者提供或者一个你不再拥有源码的组件中的一个类型。下面的例子显示了一个不可序列化的类(查看列表6.26),Employee.这个类故意不生成一个默认构造函数而且它没有任何可写的字段或属性。这意味着它不可使用任何我们到目前为止提到的序列化技术来序列化它。为了序列化这个类我们需要提供一个可以代表序列化类的代理。列表6.26 不可序列化的Employee类 你需要两步来开发一个代理。第一步是定义代表序列化类型的数据契约。第二部是实现一个基于IDataContractSurrogate接口的数据契约代理。 阅读全文

WCF 第六章 序列化和编码 使用IExtensibleDataObject 的双向序列化

2010-12-20 17:54 by DanielWise, 701 阅读, 0 推荐, 收藏, 编辑
摘要:对支持面向服务的架构来说,数据契约版本化会随着时间推移称为面向服务的一个重要方面。随着时间推移,比如创建了新的服务,它生成了一个数据契约的新版本,通过添加额外的信息。而不是重编译所有之前使用老的数据契约版本的客户端和服务端,你可能希望它们可以平滑的升级以便于可以共享公共数据,这也正是DataContractSerializer 要做的事情。如果有额外的数据,DataContractSerializer 将会抛弃额外的信息。但这并不是在所有情况下都能正常工作。如果数据被接受后又发送回给客户端,忽略任何额外数据意味着可能会丢失信息。一个例子是一个新的客户端发送数据给一个将信息存储在一个数据库中以用 阅读全文

WCF 第六章 编码与序列化 使用NetDataContractSerializer共享类型

2010-12-20 17:33 by DanielWise, 1104 阅读, 0 推荐, 收藏, 编辑
摘要:WCF 中的默认序列化方法是DataContractSerializer. 这是WCF开发组想要大部分开发人员使用的序列化方法因为它强制进行契约共享而非类型共享。这是创建面向服务架构的一个原则。然而,如果你的想法是支持类型一致并在客户端和服务端间共享类型信息那么这个方法并不会为你的设计引入问题,你可以使用NetDataContractSerializer来序列化。就像在之前的”比较WCF序列化选项”章节描述的那样,NetDataContractSerializer与DataContractSerializer本质是类似的,但是额外支持了类型信息共享和引用保留。 尽管WCF支持NetDataCo 阅读全文

WCF 第六章 序列化与编码 保留引用和循环引用

2010-12-18 22:26 by DanielWise, 1403 阅读, 0 推荐, 收藏, 编辑
摘要:关于引用和序列化有两个重要的问题。这两个问题都是关于通过引用保留跟踪的。当你试着优化需要序列化的数据总量或者当在客户端和服务端共享类型信息时保留引用将会起很重要的作用。 引用保留允许同样的数据在一个数据契约中引用多于一次而不用重复数据。当你使用数据可能被引用多于一次的列表,数组和哈希表等数据结构时,保留引用这是一个很常用的场景。通过保留引用,数据在它第一次出现在数据契约中时被序列化然这个数据的所有顺序出现都以引用的形式。这可以在序列化时并且数据被引用多次的时候实现减少数据总量的预期重要效果。 循环引用是指一个对象维持对子对象的引用,子对象还会对其引用。关于循环引用的一个例子是一个子对象维持到父 阅读全文

WCF 第六章 序列化和编码之DataContractJsonSerializer

2010-12-17 19:20 by DanielWise, 1967 阅读, 0 推荐, 收藏, 编辑
摘要:DataContractJsonSerializer支持使用以JavaScript 对象标记作为序列化格式并添加到.NET 3.5 Framework 中。如果从一个使用JavaScript 的网络应用调用服务序列化会工作的很好,特别是ASP.NET AJAX 和Silverlight 网络应用。当使用WebScriptEnablingBehavior行为时会使用DataContractJsonSerializer。对应的,如果WebHttpBehavior行为配置成使用JSON编码也可以使用DataContractJsonSerializer。这些终结点行为指导WCF支持REST/POX 类 阅读全文

WCF 第六章 序列化与编码之XmlSerializer

2010-12-16 18:29 by DanielWise, 3669 阅读, 0 推荐, 收藏, 编辑
摘要:XmlSerializer 是WCF中可以用来序列化的第三种方法。XmlSerializer 是已经被.NET2.0 架构内建支持的一个序列化方法。使用XmlSerializer有好几个优势,包括对已有.NET类型的支持,与ASP.NET Web 服务的兼容,和改变XML输出的能力。 WCF支持XmlSerializer以便于它可以与已有的类型一起使用,而DataContractSerializer是特别用于新类型的。对已有类型的支持通常是对已有的应用程序或者那些你没有源码或者你不能重编译的你应用程序来支持DataContract序列化的第三方组件。XmlSerializer也是使用ASP.N 阅读全文

WCF 第六章 序列化和编码之NetDataContractSerializer

2010-12-15 17:56 by DanielWise, 1515 阅读, 0 推荐, 收藏, 编辑
摘要:NetDataContractSerializer是WCF中一个可以替代的序列化方法,它允许类型共享。这个类可以再System.Runtime.Serialization命名空间中找到。当类型必须在客户端和服务端保持正确时会使用这个序列化方法。NetDataContractSerializer通过对CLR类型添加额外信息并保存引用来支持类型精确。除了这个,在NetDataContractSerializer和DataContractSerializer之间没有任何不同。 类型信息的共享与仅仅共享契约的原则是相悖的。因为NetDataContractSerializer并不意味着在不同应用程序间 阅读全文

WCF 第六章 序列化与编码 比较WCF序列化选项

2010-12-15 17:31 by DanielWise, 933 阅读, 2 推荐, 收藏, 编辑
摘要:使用WCF有很多种方式来序列化对象。确定使用哪种方法来序列化取决于一系列因素。这些因素包括你是否想要与契约共享类型,支持现有的.NET类型,保留引用以及更多。DataContractSerializerWCF中默认的序列化方法是DataContractSerializer.这个类存在于System.Runtime.Serialization命名空间里。DataContractSerializer是用来支持基于XSD元数据的契约共享的。它将公共语言运行时(CLR)类型映射成XSD定义的类型。这意味着XSD是可以用来在两个应用程序间交换数据的公共元数据。例如,你可以使用XSD在一个.NET应用程序 阅读全文

WCF 第六章 序列化和编码

2010-12-14 22:11 by DanielWise, 1129 阅读, 0 推荐, 收藏, 编辑
摘要:在第二章"契约",我们讨论了使用DataContract序列化器在客户端和服务端之间将CLR类型转换成基于标准的XML的序列化。然而有很多场景并不适合使用DataContract序列化器。这包括不支持DataContract序列化器的对已存在的CLR类型的序列化,原有的Web 服务,交互系统,代码合并(比如.NET Remoting)和数据形状。数据形状是指控制一个用来性能优化和契约优先开发的序列化成XML的.NET类型的过程。在这些情况下,了解如何使用WCF和.NET Framework提供的序列化工具是很重要的。 编码是另外一个与序列化相关的重要主题。WCF在对象序列化和将消息转换成可以使 阅读全文