不过,一改传统对WCF的工作流程进行平铺直叙,我将另辟蹊径,借助于我们熟悉的ASP.NET作为请求处理平台,通过一个简单的托管程序模拟整个WCF客户端和服务端的架构。...请求消息的解码和回复消息的编码:将接收到的字节数组通过解码生成请求消息对象,并将回复消息通过编程转化成字节组。...序列化和反序列化通过ClienthMessageFormatter完成 请求消息的编码和回复消息的解码:对请求消息进行编码生成字节数组供传输层发送,以及将传输层接收到的字节数组解码生成恢复消息。...Contracts用于定义服务契约,被服务端和客户端引用。客户端通过一个Console应用模拟,而服务端则通过一个ASP.NET Website实现。 ?...借助于MethodInfo对象得到操作方法的输入参数和输出参数数量后,创建两个对象数组,分别用于保存通过DispatchMessageFormatter对象对于请求消息进行反序列化得到的输入参数,和通过
在《通过一个模拟程序让你明白ASP.NET MVC是如何运行的》一文中我通过一个普通的ASP.NET Web程序模拟了ASP.NET MVC的执行流程,现在我们通过类似的原理创建一个用于模拟WCF服务端和客户端工作原理的模拟程序...我们只模拟WCF完成一个简单的服务调用所必需的组件和流程,右图反映了进行服务调用的必要步骤和使用的相关WCF组件。...下面列出了服务端涉及的组件和流程: 请求消息的接收和回复消息的发送:服务端在传输层监听与接收来自客户的请求,并将经过编码后的回复消息通过传输层发送到客户端; 请求消息的解码和回复消息的编码:将接收到的字节数组通过解码生成请求消息对象...,并将回复消息通过编码转化成字节数组。...序列化和反序列化通过ClientMessageFormatter完成; 请求消息的编码和回复消息的解码:对请求消息进行编码生成字节数组供传输层发送,以及将传输层接收到的字节数组解码生成回复消息。
WCF Data Services 5.0已经在4月9日发布,支持OData V3版本的协议。之前版本的WCF Data Services是随.NET FX 4.0发布的,这次是单独提供了安装包下载。...用户可以通过向这些URI发送请求用于引发一些操作,该特性同样工作于Entity Framework; 16项新的空间原语(Spatial Primitives)——它允许客户端在过滤、投影和排序子句中对地理空间数据执行操作...; ODataLib现在支持对所有的OData负载进行序列化和反序列化; EdmLib—— 构建服务的EDM以用于OData序列化/反序列化,其中包括支持标注; 支持Any/All查询(目前还不支持联接...config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V3; } } } Visual Studio 2010 中的实体框架 4.0 和...WCF 数据服务 4.0 WCF Data Services Action Provider for Entity Framework
理解了SO的基本原理,我们来看看WCF,从WCF的全称来分析——Windows Communication Foundation,顾名思义,他就是解决分布式互联系统中各相互独立的子系统如何交互的问题,换句话说...其中DataContractSerializer为WCF默认的Serializer,如果没有显式定采用另外一种Serializer,WCF会创建一个DataContractSerializer 序列化NET...当这些字节流从一个Application传递到另一个Application,由于我们的程序的业务逻辑处理的是一个个的.NET对象,所以在目标Application, 会以一个相反的过程把接收到的字节流重构成为和原来一样的....NET Object——目标Application对接收到的字节流记过Decoding转化成XML Infoset,然后通过创建和用于序列化过程一致的Serializer通过Deserialization...所以这就对Serializer提出了要求——它必须为Managed Type的结构和XML的结构提供可逆性的保证——我们把一个.NET Object序列化成一组XML,然后对这组XML进行反序列化重建的对象必须和原来一致
在这种情况下,它利用的根本原因与我之前披露的相同,.NET 通过序列化从字节数组加载不受信任的代码,但有一个有趣的转折(*spoiler*它没有使用BinaryFormatter ,主要是)。...MS,或者至少是 .NET 团队(嗨,Barry),不太可能很快解决 DG 和 .NET 之间的根本不兼容问题。 是你吗,NetDataContractSerializer?...在一个简单的、定义良好的 Web 服务中,这不是问题。但它确实使 DCS 作为通用的、可利用的序列化程序变得不那么有用。...因此,问题是,这样的应用程序存在吗?我们只看一个例子。 InstallUtil的方式 InstallUtil是一个预安装在 .NET Framework 中的 .NET 实用程序。...如果我们可以说服InstallUtil加载精心设计的安装状态文件,其中包含反序列化链以从字节数组加载程序集,我们可以绕过 DG。
在对.NET Framework 对象进行序列化时,序列化程序了解各种序列化编程模型,包括新的数据协定模型。 当对XML进行反序列化时,序列化程序使用XmlReader和XmlWriter类。...注意,当序列化或反序列化数组时,每个数组项都计为一个单独的对象 5.往返行程 在一次操作中对对象进行反序列化和重新序列化时将发生往返行程。...还请注意,必须ReadObject方法返回的对象强制转换为适当的类型 第四部分--XmlSerializer WCF还支持XmlSerializer,XmlSerializer类并非专用于WCF,ASP.NET...这些类型可以是常规的类型数组或集合类型,例如,ArrayList和Dictionary.CollectionDataContractAttribute属性可以用于自定义这些类型的序列化,但不是必需的。...表示原始XML的类型或表示ADO.NET关系数据的类型。支持XmlElement和XmlNode类型的数组作为一种直接表示XML的方式。
问题1解答:通过压缩来传输数据 问题2解答: (1)WCF自带的压缩方式 (2)自定义WCF binding进行压缩 (3)将对象序列化为...JSON格式 今天来探讨一下WCF自带的压缩方式Gzip和Json序列化 先上图: ?...注意,.NET framwork版本需要在4.0以上(包含4.0)。...比未经过序列化的数据减少了89 bytes的数据。 这里有个问题,为什么Json格式的数据比原WCF基于XML传输的数据小???...文章: WCF安全1-开篇 WCF安全2-非对称加密 WCF安全3-Transport与Message安全模式 WCF传输1-你是否使用过压缩或Json序列化?
在.net中,各种类型的集合均实现了IEnumerable或者IEnumerable接口,一个数据契约的数据成员可以是一个集合类型,服务契约也可以定义直接与集合交互的操作,但是这都是.net所特有的...,WCf不能在元数据中公开它们,然后WCF专门为集合提供了编组原则。 ...在定义服务时候,无论使用的是IEnumerable、IList和ICollection,他们的传输形式都使用了数组,如 namespace ContractInterface { ...,那么只要提供的集合包含了Add方法,并且符合以下签名中的一种,WCF就能够自动地将集合规范为数组类型。 ...相似,它不能序列化集合,将它应用到一个集合上时,会将集合当作一个泛型的链表类型公开给客户端链表可能不会对原来的集合执行任何操作,但它会提供一个类似接口的集合类型,而不是数组。
那么在WCF下对自定义集合类型具有哪些限制,DataContractSerializer对于自定义集合类型又具有怎样的序列化规则呢?我们接下来就来讨论这些问题。...技术剖析(卷1)》第五章:序列化与数据契约(Serialization and Data Contract) WCF技术剖析系列: WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 WCF...技术剖析之二:再谈IIS与ASP.NET管道 WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 WCF技术剖析之五:利用...ASP.NET兼容模式创建支持会话(Session)的WCF服务 WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效 WCF技术剖析之七:如何实现...(上篇) WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 WCF技术剖析之十六:数据契约的等效性和版本控制
),它只需要28字节和100-200ns的解析时间。...而XML的版本需要69字节(除去空白)和5000-10000ns的解析时间。...相关文章: .net自带二进制序列化,XML序列化和ProtoBuf序列化的压缩对比 WCF服务上应用protobuf 玩转Protocol Buffers Beetle使用Protobuf.net进行对象序列化传输.../03/29/protocol-buffers-and-wcf.aspx Protobuf-net: the unofficial manual http://www.codeproject.com/...Articles/642677/Protobuf-net-the-unofficial-manual Working with Protobuf WCF Services http://www.drdobbs.com
[第6篇] 为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效 本篇文章来源于几天前一个朋友向我咨询的问题。...问题是这样的,他说他采用ASP.NET应用程序的方式对定义的WCF服务进行寄宿(Hosting),并使用配置的方式对服务的BaseAddress进行了设置,但是在创建ServiceHost的时候却抛出...在这篇文章中,我们会详细讨论WCF序列化中一个重要的话题:已知类型(Known Type)。 WCF下的序列化与反序列化解决的是数据在两种状态之间的相互转化:托管类型对象和XML。...由于范型类型和集合类型在序列化和反序列化上具有一些特殊的行为和规则,在这篇文章中,我将会对此进行详细介绍。...[第21篇] WCF基本的异常处理模式[上篇][中篇][下篇] 由于WCF采用.NET托管语言(C#和NET)作为其主要的编程语言,注定以了基于WCF的编程方式不可能很复杂。
问题1解答:通过压缩来传输数据 问题2解答: (1)WCF自带的压缩方式 (2)自定义WCF binding进行压缩 (3)将对象序列化为...JSON格式 今天来探讨一下WCF自带的压缩方式Gzip和Json序列化 先上图: ?...注意,.NET framwork版本需要在4.0以上(包含4.0)。...比未经过序列化的数据减少了89 bytes的数据。 这里有个问题,为什么Json格式的数据比原WCF基于XML传输的数据小???...原因是WCF的传输的数据是将对象序列化为xml格式,需要用很多标签来记录各个字段的内容。而用JSON格式的数据,已经将对象转化为键值对形式的数据,不包含标签,所以数据量减少了。 ?
第1章 WCF简介 (WCF Overview) 1.1 SOA基本概念的和设计思想 1.2 WCF是对现有Windows平台下分布式通信技术的整合 1.3...ServiceKnownTypeAttribute 5.4 泛型数据契约与集合数据契约 5.4.1 泛型数据契约 5.4.1 数据契约对数组与集合的支持...6.4 消息编码(Message Encoding) 6.4.1 序列化(反序列化)和编码(解码) 6.4.2 XmlDictionary、XmlDictionaryReader...ServiceHost 7.4 通过IIS进行服务寄宿 7.4.1 案例演示7-2:如何通过IIS进行服务寄宿 7.4.2 IIS管道与ASP.NET...架构 7.4.3 IIS服务寄宿实现详解 7.4.4 案例演示7-3:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
不论是SOA,还是云计算,都需要解决一个核心的问题,那就是通信(Communication),而WCF解决的就是通信问题。...本章涉及的内容还包括:如何为数据契约序列化器设定已知类型(KnownType),以及已知类型在序列化和反序列化过程中所起的重要作用;如何定义基于范型数据契约和集合数据契约;等价数据契约在WCF消息交换中的意义...在本章的最后,我们将介绍在整个WCF消息分发、处理流程中,是如何实现数据的序列化和反序列化的。...此外,还会深入介绍两种不同模式下,即ASP.NET并行模式(ASP.NET Side by Side)和ASP.NET 兼容(ASP.NET Compatible),实现WCF服务寄宿的实现原理和表现行为...如果读者在阅读本书过程中,发现任何问题可以直接向我本人反馈。当然如何你遇到任何WCF相关任何问题,都可以和我一起交流。
在TCP网络编程中这是必须面对的问题。在tcp网络编程中,要反序列化业务消息,就要先知道业务数据的大小。而且在实际应用中可能在一个发送操作中,发送多个业务消息,而且每个业务消息的大小、类型都不一样。...显然消息边界的确认问题和protobuf库无关,还得自己搞定。在官方文档中也提到,protobuf并不太适合来作大数据的处理,当业务消息超过1M时,就应该考虑是否应该用另外的替代方案。...protobuf的dotNet实现protobuf-net, 支持WCF的DataContact,WCF程序几乎不需要什么修改就能使用。...一个最小的可以工作的例子就是protobuf-net提供的(client, server),它使用的是共享契约的方式,通过WCF的配置方式,添加一个Endpoint-behavior,引用一个自定义的WCF...参考文章: .net自带二进制序列化,XML序列化和ProtoBuf序列化的压缩对比 http://www.cnblogs.com/onlytiancai/archive/2009/07/02/protobuf_net_test.html
本节除了 .NET CLI 外,还编译了可支持和扩展 .NET 功能的工具列表。...WCF dotnet-svcutil.xmlserializer 工具 在 .NET Framework 中,可以使用 svcutil 工具预生成序列化程序集。...WCF dotnet-svcutil.xmlserializer 工具在 .NET 5(和 .NET Core)以及更高版本上提供类似的功能。...它为客户端应用程序中 WCF 服务协定使用且可由 XmlSerializer 序列化的类型预生成 C# 序列化代码。 当序列化或反序列化这些类型的对象时,这会提高 XML 序列化的启动性能。...是适用于面向 .NET 5(和 .NET Core)以及更高版本的库的解决方案。
我们采用WCF服务来实现2号方案,具体来说就是在各个业务系统中开发各自的WCF客户数据服务(以下简称外围服务),再开发一个整合数据的WCF代理服务,在外围服务和代理之间使用TCP通道进行数据的高速传输,...格式的数据比较困难,所以我们的“客户端”程序是一个ASP.NET后台程序来分别绑定1号方案的DataSet和2号方案的实体类的,但问题也在这里。...DataSet的数据表示天生就是直接支持XML的,所以它在后台系统间传输数据“序列化”/“反序列化”非常快(在此我不敢肯定是不是这样,对.NET底层不是很了解),而实体类要表示成JSON格式,必须序列化...,在前台(这里的客户端),必须对JSON字节流反序列化,再生成实体类,这一过程通过上面的对比,我们发现效率是很低的(因为2号方案只有4台服务器工作,故实际上查询的总数据量比1号方案少了2万条)。...下面附上JSON在前台反序列化的代码: /// /// 以GET方式请求WCF服务,并将结果处理成指定的类型。
dotnet-svcutil.xmlserializer NuGet 包可以为 .NET Core 项目预生成序列化程序集。...它为客户端应用程序中由 WCF 服务协定使用的且可由 XmlSerializer 序列化的类型预生成 C# 序列化代码。 当序列化或反序列化这些类型的对象时,这会提高 XML 序列化的启动性能。...先决条件 .NET Core 2.1 SDK 或更高版本 你最喜欢的代码编辑器 可以使用命令 dotnet --info 检查已安装哪些版本的 .NET SDK 和运行时。...Core 控制台应用程序作为面向 .NET Core 2.1 或更高版本的 WCF 客户端应用程序。...例如,通过在浏览器中运行 http://localhost:2561/Service1.svc 来启动 WCF 服务。 然后启动客户端应用程序,它将在运行时自动加载和使用预生成的序列化程序。
技术剖析(卷1)》第五章:序列化与数据契约(Serialization and Data Contract) WCF技术剖析系列: WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构 WCF...技术剖析之二:再谈IIS与ASP.NET管道 WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘 WCF技术剖析之五:利用...ASP.NET兼容模式创建支持会话(Session)的WCF服务 WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效 WCF技术剖析之七:如何实现...(Data Contract)和数据契约序列化器(DataContractSerializer) WCF技术剖析之十三:序列化过程中的已知类型(Known Type) WCF技术剖析之十四:泛型数据契约和集合数据契约...(上篇) WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇) WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 WCF技术剖析之十六:数据契约的等效性和版本控制
在当前版本(.NET 4) 的Windows通讯基础(WCF),包含一个新的媒体类型,需要相当数量的努力。...OnReadFromStream() 方法进行序列化和反序列化处理。...人们经常认为媒体类型只是在服务端使用,但是它用来在客户端控制序列化和反序列化的要求,下图显示了一个HTTP 请求/响应和媒体类型格式化扮演的角色: ?...这个例子我们使用入门:构建简单的Web API 的代码和WCF Web API Preview 6。...相关文章: 软件系统开发中的数据交换协议 .net自带二进制序列化,XML序列化和ProtoBuf序列化的压缩对比 Android上GTalk以及Push机制的XMPP数据选择使用protobuf格式而非
领取专属 10元无门槛券
手把手带您无忧上云