WCF
文章平均质量分 81
heshengfen123
最近想从基础学起...
展开
-
C#学习笔记32——WCF
Windows Communication Foundation (WCF) 是用于构建面向服务的应用程序的框架。借助 WCF,可以将数据作为异步消息从一个服务终结点发送至另一个服务终结点。服务终结点可以是由 IIS 承载的持续可用的服务的一部分,也可以是应用程序中承载的服务。终结点可以是从服务终结点请求数据的服务客户端。简单消息可以是作为 XML 发送的单个字符或单个单词,复杂消息可以是二进制数转载 2013-07-15 11:22:17 · 819 阅读 · 0 评论 -
WCF技术剖析之十:调用WCF服务的客户端应该如何进行异常处理
在前面一片文章(服务代理不能得到及时关闭会有什么后果?)中,我们谈到及时关闭服务代理(Service Proxy)在一个高并发环境下的重要意义,并阐明了其根本原因。但是,是否直接调用ICommunicationObject的Close方法将服务代理关闭就万事大吉了呢?事情远不会这么简单,这其中还会涉及关于异常处理的一些操作,这就是本篇文章需要讨论的话题。一、异常的抛出与Close的失败一般转载 2013-07-15 11:35:42 · 679 阅读 · 0 评论 -
WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]大部分的系统都是以数据为中心的(Data Central),功能的实现表现在对相关数据的正确处理。而数据本身,是有效信息的载体,在不同的环境具有不同的表示。一个分布式的互联系统关注于数据的交换,而数据正常交换的根本前提是参与数据交换的双方对于数据结构的一致性理解。这就为数据的表现提出转载 2013-07-15 11:40:33 · 944 阅读 · 0 评论 -
WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
如果一个类型,不一定是数据契约,和给定的数据契约具有很大的差异,而我们要将该类型的对象序列化成基于数据契约对应的XML。反之,对于一段给定的基于数据契约的XML,要通过反序列化生成该类型的对象,我们该如何实现这样的场景?比如下面定义了两个类型Contact和Customer,其中Customer是数据契约,Contact的Sex属性相当于Customer的Gender属性,而Contact的F转载 2013-07-15 11:43:53 · 619 阅读 · 0 评论 -
WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作。对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作处理时间花在I/O操作处理,比如访问数据库、文件系统、网络资源等。对于I/O绑定型操作,我们可以充分利用多线程的机制,让多个操作在自己的线程并发执行,从而提高系统性能和响应能力。服务调用就是典型的I/转载 2013-07-15 11:35:56 · 632 阅读 · 0 评论 -
WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
在.NET中,所有的集合都实现了IEnumerable接口,比如Array、Hashtable、ArrayList、Stack、Queue等。有的集合要求元素具有相同的类型,这种集合一般通过泛型的方式定义,它们实现另一个接口IEnumerable(IEnumerable本身继承自IEnumerable),这样的集合有List、Dictionary、Stack、Queue等。基于集合类型的序列化具有转载 2013-07-15 11:43:04 · 896 阅读 · 0 评论 -
WCF技术剖析之十六:数据契约的等效性和版本控制
数据契约是对用于交换的数据结构的描述,是数据序列化和反序列化的依据。在一个WCF应用中,客户端和服务端必须通过等效的数据契约方能进行有效的数据交换。随着时间的推移,不可避免地,我们会面临着数据契约版本的变化,比如数据成员的添加和删除、成员名称或者命名空间的修正等,如何避免数据契约这种版本的变化对客户端现有程序造成影响,就是本节着重要讨论的问题。一、数据契约的等效性数据契约就是采用一种厂转载 2013-07-15 11:44:37 · 620 阅读 · 0 评论 -
【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(一)
在园子里混迹多年,始终保持着“只看帖不回帖”的习惯,看了很多,学了很多,却从不敢写些东西贴出来,一来没什么可写的,二来水平不够,怕误人子弟……最近在做一个MVC+WCF+EF的项目,遇到问题不少,但大多数问题都是前人遇到并解决了的,感谢园子里的大牛们的无私奉献。俗话说“礼尚往来”,我也在此分享一个最近在项目中遇到的问题,就是远程调用时的Expression表达式的序列化问题的初始解决方案,转载 2013-12-13 13:43:09 · 3229 阅读 · 0 评论 -
【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(二)
接上文 【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(一) 上文留下了一个问题没有处理,但最后也找到了相应的解决方案,下面就来说下问题的解决Expression Tree Serializer 提供的解决方案是把Expression表达式树转换为XElement类型的XML数据,传输到服务端,再反转换还原成原来的Exp转载 2013-12-13 13:46:18 · 3596 阅读 · 0 评论 -
【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(四)——关于Guid的问题
发了本系列的前三遍几天后,收到了若风云 同学的站内信,说如果Expression中包含Guid类型属性的查询时,会报异常,亲自验证了下,确实会有问题。原因是Dynamic Expression API 与 ExpressionSerialization 对Guid的支持不是很好。下面就来解决这个问题。首先,给我们的DataContract(Member类)增加一个Guid类型的属性User转载 2013-12-13 13:47:29 · 1950 阅读 · 0 评论 -
WCF技术剖析之九:服务代理不能得到及时关闭会有什么后果?
我们想对WCF具有一定了解的人都会知道:在客户端通过服务调用进行服务调用过程中,服务代理应该及时关闭。但是如果服务的代理不等得到及时的关闭,到底具有怎样的后果?什么要关闭服务代理?在任何时候都需要关闭服务代理吗?是否有一些例外呢?本篇文章将会围绕着这些问题展开。一、会话信道(Sessionful Channel) V.S. 数据报信道(Datagram Channel)WCF通过信道栈实现转载 2013-07-15 11:35:07 · 638 阅读 · 0 评论 -
WCF技术剖析之四:基于IIS的WCF服务寄宿(Hosting)实现揭秘
通过《再谈IIS与ASP.NET管道》的介绍,相信读者已经对IIS和ASP.NET的请求处理管道有了一个大致的了解,在此基础上去理解基于IIS服务寄宿的实现机制就显得相对容易了。概括地说,基于IIS的服务寄宿依赖于两个重要的对象:System.ServiceModel.Activation.HttpModule和System. ServiceModel.Activation.HttpHandl转载 2013-07-15 11:29:57 · 745 阅读 · 0 评论 -
WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析。在介绍IIS7.0的时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP的请求监听,在此基础上引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP、Named Pipes和MSMQ的网络监听,图1揭示了IIS7的总体结构。TCPListene转载 2013-07-15 11:29:27 · 961 阅读 · 0 评论 -
WCF技术剖析之二:再谈IIS与ASP.NET管道
在2007年9月份,我曾经写了三篇详细介绍IIS架构和ASP.NET运行时管道的文章,深入介绍了IIS 5.x与IIS 6.0HTTP请求的监听与分发机制,以及ASP.NET运行时管道对HTTP请求的处理流程:[原创]ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI[原创]ASP.NET Process Model之二:ASP.NET Http R转载 2013-07-15 11:26:24 · 906 阅读 · 0 评论 -
WCF技术剖析之一:通过一个ASP.NET程序模拟WCF基础架构
细算起来,已经有好几个月没有真正的写过文章了。近半年以来,一直忙于我的第一本WCF专著《WCF技术剖析》的写作,一直无暇管理自己的Blog。到目前为止《WCF技术剖析(卷1)》的写作暂告一段落,初步预计于下个月由武汉博文视点出版。在《WCF技术剖析》写作期间,对WCF又有了新的感悟,为此以书名开始本人的第三个WCF系列。本系列的目的在于对《WCF技术剖析》的补充,会对书中的一些内容进行展开讲述,同转载 2013-07-15 11:24:37 · 760 阅读 · 0 评论 -
WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。对于前者,WCF通过HttpModule实现了服务的寄宿,而对于后者,WCF的服务寄宿通过一个HttpHandler实现。只有在ASP.NET兼容模式下,我们熟悉转载 2013-07-15 11:30:33 · 703 阅读 · 0 评论 -
WCF技术剖析之七:如何实现WCF与EnterLib PIAB、Unity之间的集成
在这之前,我写过深入介绍MS EnterLib PIAB的文章(参阅《MS Enterprise Library Policy Injection Application Block 深入解析[总结篇]》),也写过WCF与PIAB的集成(参阅:《WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Applic转载 2013-07-15 11:34:04 · 773 阅读 · 0 评论 -
WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效
本篇文章来源于几天前一个朋友向我咨询的问题。问题是这样的,他说他采用ASP.NET应用程序的方式对定义的WCF服务进行寄宿(Hosting),并使用配置的方式对服务的BaseAddress进行了设置,但是在创建ServiceHost的时候却抛出InvalidOperationException,并提示相应Address Scheme的BaseAddress找不到。我意识到这可能和WCF中用于判断服转载 2013-07-15 11:32:49 · 613 阅读 · 0 评论 -
WCF技术剖析之八:ClientBase<T>中对ChannelFactory<T>的缓存机制
和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service Proxy)。而ChannelFactory则是服务代理的创建者。WCF采用基于终结点(Endpoint)服务消费方式:WCF服务通过一个或者多个终结点暴露给潜在的服务消费者,服务的消费中通过与之匹配的终结点与之交互。在客户端,我们具有两种典型的服务代理创建方式,其一是通过诸如SvcUtil.exe这样的工具导入服务的元数转载 2013-07-15 11:34:35 · 773 阅读 · 0 评论 -
WCF技术剖析之十一:异步操作在WCF中的应用(下篇)
说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实现。在定义服务契约的时候,相信大家已经注意到了OperationContractAttribute特性具有一个bool类型的AsynPattern。该属性可以将一个服务操作定义成异步实现模式,接下来的内容主要是着眼于介绍异步操作的定义和实现原理。一、异步转载 2013-07-15 11:36:47 · 586 阅读 · 0 评论 -
WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
DataContractSerializer承载着所有数据契约对象的序列化和反序列化操作。在上面一篇文章(《数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)》)中,我们谈到DataContractSerializer基本的序列化规则;如何控制DataContractSerializer序列化或者反序列化对象的数量;以及如何在序列化后的XML中转载 2013-07-15 11:41:14 · 697 阅读 · 0 评论 -
WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型类型、泛型委托和泛型方法。序列化依赖于真实具体的类型,而泛型则刻意模糊了具体类型概念。而集合代表一组对象的组合,集合具有可迭代(Enumerable)的特性,可以通过某个迭代规则遍历集合中的每一个元素。由于范型类型和集合类型在序列化和反序列化上具有一些特殊的行为和规则,在这篇文章中,我将会对此进行详细介绍。上篇先转载 2013-07-15 11:42:15 · 638 阅读 · 0 评论 -
【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(三)
接上文【Expression 序列化】WCF的简单使用及其Expression Lambada的序列化问题初步解决方案(二) 上文最后留下了一个问题,引起这个问题的操作是把原来通过硬编码字符串来设置的Expression参数改为接收用户输入。这是个非常正常的需求,可以说如果这个问题不解决,上文的Expression序列化的方法是无法应用到实际项目中的。下面来分析异常引起的原因。 首先,转载 2013-12-13 13:46:56 · 2552 阅读 · 0 评论