07 2009 档案
摘要:在上篇中大体上围绕着Message的两个话题进行讲述:消息版本(Message Version)和采用五种不同的方式创建Message。本篇文章将会详细介绍Message的另外两个主题:和消息的基本操作,比如读、写、拷贝、关闭等,以及消息状态机(Message State Machine)。
阅读全文
摘要:消息交换是WCF进行通信的唯一手段,通过方法调用(Method Call)形式体现的服务访问需要转化成具体的消息,并通过相应的编码(Encoding)才能通过传输通道发送到服务端;服务操作执行的结果也只能以消息的形式才能被正常地返回到客户端。所以,消息在整个WCF体系结构中处于一个核心的地位,WCF可以看成是一个消息处理的管道。接下来我将分上、中、a href="http://www.cnblogs.com/artech/archive/200
阅读全文
摘要:数据契约是对用于交换的数据结构的描述,是数据序列化和反序列化的依据。在一个WCF应用中,客户端和服务端必须通过等效的数据契约方能进行有效的数据交换。随着时间的推移,不可避免地,我们会面临着数据契约版本的变化,比如数据成员的添加和删除、成员名称或者命名空间
阅读全文
摘要:如果一个类型,不一定是数据契约,和给定的数据契约具有很大的差异,而我们要将该类型的对象序列化成基于数据契约对应的XML。反之,对于一段给定的基于数据契约的XML,要通过反序列化生成该类型的对象,我们该如何实现这样的场景? 这就需要使用到一个特殊的对象:数据契约代理(DataContract Surrogate)。
阅读全文
摘要:本书从WCF的终结点谈起,对终结点的三要素进行了全面而深入的介绍,帮助读者了解地址、绑定和契约的本质。通过本书对序列化的深入讲解,读者可了解WCF进行操作方法调用与消息之间转化的本质;深入剖析消息编码则会帮助读者从根本上把握WCF进行消息编码和解码的实现机制,以及不同编码方式在性能、互操作性及使用场景上的差异;同时本书从WCF的服务端框架和客户端框架进行深层次的剖析,介绍了服务寄宿和服务调用;对实例化和会话进行了讨论,从服务实例的激活和客户端状态保持两个侧面详细介绍WCF的实例上下文提供机制和基于会话信道的会话实现。最后,本书提供了一个完整的案例帮助读者掌握如何利用本书涉及的内容搭建一个基本的WCF分布式应用。本书不仅适合那些尚未接触过WCF,希望尽快入门并进行深入研究的开发人员,同样适合那些对WCF有一定了解的开发设计人员和架构师。
阅读全文
摘要:本书从WCF的终结点谈起,对终结点的三要素进行了全面而深入的介绍,帮助读者了解地址、绑定和契约的本质。通过本书对序列化的深入讲解,读者可了解WCF进行操作方法调用与消息之间转化的本质;深入剖析消息编码则会帮助读者从根本上把握WCF进行消息编码和解码的实现机制,以及不同编码方式在性能、互操作性及使用场景上的差异;同时本书从WCF的服务端框架和客户端框架进行深层次的剖析,介绍了服务寄宿和服务调用;对实例化和会话进行了讨论,从服务实例的激活和客户端状态保持两个侧面详细介绍WCF的实例上下文提供机制和基于会话信道的会话实现。最后,本书提供了一个完整的案例帮助读者掌握如何利用本书涉及的内容搭建一个基本的WCF分布式应用。本书不仅适合那些尚未接触过WCF,希望尽快入门并进行深入研究的开发人员,同样适合那些对WCF有一定了解的开发设计人员和架构师。
阅读全文
摘要:Windows Communication Foundation (WCF)是用来在不同应用间进行互通信的一个编程框架,它是.Net Framework中偏重于通信的重要组成部分。原代码名为Indigo的这个编程框架,在其Beta2 版本正式更名为WCF,于2006年12月作为.Net Framework 3.0的四套API之一,一起发布。
阅读全文
摘要:第一次邂逅WCF是在微软举办的一场关于Windows Vista技术推广培训上,时间大概是2005年10月份,当时对WCF可谓是一见钟情。如果读者也像我一样,之前习惯了采用.NET Remoting、XML Web Service、WSE、MSMQ来架构你分布式应用的话,应该不难想象我第一次接触WCF时心中的那份震撼。WCF是Windows平台下所有分布式技术集大成者,它将这一系列独立的分布式技术整合,提供一个统一的应用编程接口,这本身就是一项创举。这些被整合的分布式技术不仅仅包含提到的这些,还包括 DCOM、Enterprise Service等。WCF并非单纯地将它们进行简单的累加,而是从底而上进行了革新性的重新设计,使WCF成为了一个可定制、可扩展的通信框架。
阅读全文
摘要:在.NET中,所有的集合都实现了IEnumerable接口,比如Array、Hashtable、ArrayList、Stack、Queue等。有的集合要求元素具有相同的类型,这种集合一般通过泛型的方式定义,它们实现另一个接口IEnumerable(IEnumerable本身继承自IEnumerable),这样的集合有List、Dictionary、Stack、Queue等。基于集合类型的序列化具有一些特殊的规则和行为,在上篇中我们详细介绍了基于泛型数据契约的序列化规则,接下来我们介绍基于集合对象的序列化,以及基于集合类型的服务操作。
阅读全文
摘要:在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型类型、泛型委托和泛型方法。序列化依赖于真实具体的类型,而泛型则刻意模糊了具体类型概念。而集合代表一组对象的组合,集合具有可迭代(Enumerable)的特性,可以通过某个迭代规则遍历集合中的每一个元素。由于范型类型和集合类型在序列化和反序列化上具有一些特殊的行为和规则,在这篇文章中,我将会对此进行详细介绍。上篇先来说所泛型数据契约。
阅读全文
摘要:[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]DataContractSerializer承载着所有数据契约对象的序列化和反序列化操作。在上面一篇文章(《数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)》)中,我们谈到DataContractSerializer基本的序列化规则;如何控制DataContractSerializer序列化或者反序列化对象的数量;以及如何在序列化后的XM
阅读全文
摘要:[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]] 大部分的系统都是以数据为中心的(Data Central),功能的实现表现在对相关数据的正确处理。而数据本身,是有效信息的载体,在不同的环境具有不同的表示。一个分布式的互联系统关注于数据的交换,而数据正常交换的根本前提是参与数据交换的双方对于数据结构的一致性理解。WCF下的序列化(Serialization)解决的是如何将数据从对象的表现形式转变成XML表现形式,以确保数据的正常交换。从本章起,我将讲述WCF序列化的本质,首先从从数据契约谈起。
阅读全文
摘要:说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实现。在定义服务契约的时候,相信大家已经注意到了OperationContractAttribute特性具有一个bool类型的AsynPattern。该属性可以将一个服务操作定义成异步实现模式,接下来的内容主要是着眼于介绍异步操作的定义和实现原理。
阅读全文
摘要:按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作。对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作处理时间花在I/O操作处理,比如访问数据库、文件系统、网络资源等。对于I/O绑定型操作,我们可以充分利用多线程的机制,让多个操作在自己的线程并发执行,从而提高系统性能和响应能力。服务调用就是典型的I/O绑定型操作,所以多线程在服务调用中具有广泛的应用。在本篇文章中,我们专门来讨论多线程或者是异步操作在WCF中的具体应用。
阅读全文
摘要:在前面一片文章(服务代理不能得到及时关闭会有什么后果?)中,我们谈到及时关闭服务代理(Service Proxy)在一个高并发环境下的重要意义,并阐明了其根本原因。但是,是否直接调用ICommunicationObject的Close方法将服务代理关闭就万事大吉了呢?事情远不会这么简单,这其中还会涉及关于异常处理的一些操作,这就是本篇文章需要讨论的话题。
阅读全文
摘要:我们想对WCF具有一定了解的人都会知道:在客户端通过服务调用进行服务调用过程中,服务代理应该及时关闭。但是如果服务的代理不等得到及时的关闭,到底具有怎样的后果?什么要关闭服务代理?在任何时候都需要关闭服务代理吗?是否有一些例外呢?本篇文章将会围绕着这些问题展开。
阅读全文
摘要:和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service Proxy)。而ChannelFactory则是服务代理的创建者。在客户端,我们具有两种典型的服务代理创建方式,其一是通过诸如SvcUtil.exe这样的工具导入服务的元数据生成相应的服务代理(一个继承自ClientBase的类型)代码和相关配置;其二是直接通过相应的终结点信息(通过代码指定或者配置)创建ChannelFactory对象,并借助该对象直接进行服务代理的创建。实际上,即使通过ClientBase对象进行服务调用,其内部也是调用ChannelFactory创建的服务代理。整个ChannelFactory的创建是一项相对复杂并且费时的工作,会涉及很多诸如反射、配置文件的读取等操作。为了提高服务调用的性能,在.NET 3.5中,WCF在ClientBase中引入了ChannelFac
阅读全文
摘要:我不知道在博客园首页发布者这样一个帖子,对于一个技术论坛性质的网站是否适合,为此在发文之前特意征得了DUDU的同意。标题所说的那个女孩名称程婷,是我一个同事的女朋友,于一个月前诊断出得了M7型急性白血病。之前,没有任何征兆,仅仅是确诊当天刷牙流血不止。医院的诊断犹如晴天霹雳,给我的同事和他们的家庭以沉重的打击。这个同事同时也是我很好的朋友,我在第一时间得到这个消息,我当时都不敢相信这是真的。每天下班都见到的一个活泼可爱的女孩,怎么突然“身患绝症”画上等号?这些本以为在韩剧中才能见到的故事,怎么可能突然降临到你我的身边?
阅读全文