
J. WCF
文章平均质量分 92
artech
这个作者很懒,什么都没留下…
展开
-
[原创]WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[第2篇]
在[第1篇]中,我们介绍了WCF关于实例管理一些基本的知识点,包括InstanceContext、InstanceContextMode、已经如何通过ServiceBehaviorAttribute应用不同的实例上下文模式给不同的服务。在[第1篇]中,对WCF采用的三种不同实例上下文模式进行了简单的比较,本篇的重点方法对单调(PerCall)模式为进行详细介绍。 在单调(Per-Cal原创 2009-11-09 00:07:00 · 5821 阅读 · 0 评论 -
[原创]WCF后续之旅(3): WCF Service Mode Layer 的中枢—Dispatcher
在本系列的第一部分、第二部分中,我们对WCF的channel layer进行了深入的讨论。我们接下来继续讨论WCF的service mode layer。本篇文章着重介绍service 端的ServiceMode。写作此篇文章旨在达到以下两个目的: 希望读者对ServiceMode有一个大致的了解,结合前面介绍的channel layer的相关知识,帮助读者了解WCF的整个实现机制和执原创 2008-07-15 09:17:00 · 629 阅读 · 0 评论 -
[原创]WCF后续之旅(4):WCF Extension Point 概览
在本系列的每篇文章中,我多次提到WCF是一个极具可扩展性的分布是消息通信框架。为了让读者对WCF Extension有一个总体的的认识,在这里我会简单列举了我们经常使用的绝大部分的扩展点,以及通过这些扩展点能够解决实现项目开发中的那些问题。 有一点需要特别提醒的是:对WCF extensions的灵活应用依赖于你对channel layer和service mode dispatchin原创 2008-07-16 09:17:00 · 788 阅读 · 0 评论 -
[原创]WCF后续之旅(5): 通过WCF Extension实现Localization
在上一篇文章中, 我列出了WCF一系列的可扩展对象和元素,并简单介绍了他们各自的功能、适合的场景和具体解决的问题。从本篇开始我将通过一个个具体的例子来介绍如何利用这些扩展点对WCF进行扩展,从而解决一些我们在实现的项目开发中可能出现的问题。今天,我们将讨论如何通过WCF extension实现多语言、本地化的功能。我们模拟这样的一个场景:我们现在有一个支持多语言的项目,假设通过支持英原创 2008-07-17 09:16:00 · 788 阅读 · 0 评论 -
[原创]WCF后续之旅(6): 通过WCF Extension实现Context信息的传递
在上一篇文章中,我们讨论了如何通过CallContextInitializer实现Localization的例子,具体的做法是将client端的culture通过SOAP header传到service端,然后通过自定义的CallContextInitializer设置当前方法执行的线程culture。在client端,当前culture信息是通过OperationContext.Cur原创 2008-07-24 09:16:00 · 846 阅读 · 0 评论 -
[原创]WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成
松耦合、高内聚是我们进行设计的永恒的目标,如何实现这样的目标呢?我们有很多实现的方式和方法,不管这些方式和方法在表现形式上有什么不同,他们的思想都可以表示为:根据稳定性进行关注点的分离或者分解,交互双方依赖于一个稳定的契约,而降低对对方非稳定性因素的依赖。从抽象和稳定性的关系来讲,抽象的程度和稳定程度成正相关关系。由此才有了我们面向抽象编程的说法,所以“只有依赖于不变,才能应万变原创 2008-07-28 09:16:00 · 1629 阅读 · 0 评论 -
[原创]WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成
在上一篇文章中,我们通过自定义InstanceProvider实现了WCF和微软Enterprise Library Unity Application Block的集成, 今天我们已相同的方式实现WCF与Enterprise Library的另一个Application Block的集成:Policy Injection Application Block (PIAB)。PIAB,原创 2008-07-29 09:16:00 · 633 阅读 · 0 评论 -
[原创]WCF后续之旅(9):通过WCF的双向通信实现Session管理[Part I]
我们都知道,WCF支持Duplex的消息交换模式,它允许在service的执行过程中实现对client的回调。WCF这种双向通信的方式是我们可以以Event Broker或者订阅/发布的方式来定义和调用WCF Service。今天我们就给大家一个具体的例子:通过WCF的duplex communication方式现在Session管理。1、Session 管理提供的具体功能我们的原创 2008-08-04 09:16:00 · 597 阅读 · 0 评论 -
[原创]WCF后续之旅(9): 通过WCF双向通信实现Session管理[Part II]
5、Session Management Service的实现现在我们来看看Session Management真正的实现,和我以前的例子不同,我不是把所有的实现都写在WCF service上,而是定义了另一个class来实现所有的业务逻辑:SessionManager。我们分析一下具体的实现逻辑。namespace Artech.SessionManagement.Servic原创 2008-08-04 09:16:00 · 676 阅读 · 0 评论 -
[原创]WCF后续之旅(10): 通过WCF Extension实现以对象池的方式创建Service Instance
我们知道WCF有3种典型的对service instance进行实例化的方式,他们分别与WCF的三种InstanceContextMode相匹配,他们分别是PerCall,PerSession和Single。PerCall为每次service invocation创建一个新的service instance; 而PerSession则让一个service instance处理来自通过各S原创 2008-08-05 09:15:00 · 539 阅读 · 0 评论 -
[原创]MS Enterprise Library Policy Injection Application Block 深入解析[总结篇]
Policy Injection Application Block(PIAB)是Enterprise Library众多Application Block中的一个。在我看来,PIAB和后来的Unity Application Block的推出在Enterprise Library的发展历程中具有重要的意思,它标志着Enterprise Library向真正框架上面发展。不再是仅仅关注于原创 2008-08-08 09:15:00 · 667 阅读 · 0 评论 -
[原创]WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)
对于一般的多线程操作,比如异步地进行基于文件系统的IO操作;异步地调用Web Service;或者是异步地进行数据库访问等等,是和具体的线程无关的。也就是说,对于这些操作,任意创建一个新的线程来执行都是等效的。但是有些情况下,有些操作却只能在固定的线程下执行。比如,在GUI应用下,对控件的访问就需要在创建该控件的线程下执行;或者我们在某个固定的线程中通过TLS(Thread Local原创 2008-08-21 12:15:00 · 1054 阅读 · 0 评论 -
[原创]WCF后续之旅(12): 线程关联性(Thread Affinity)对WCF并发访问的影响
在本系列的上一篇文章中,我们重点讨论了线程关联性对service和callback的操作执行的影响:在service host的时候,可以设置当前线程的SynchronizationContext,那么在默认情况下,service操作的执行将在该SynchronizationContext下执行(也就将service操作包装成delegate传入SynchronizationContex原创 2008-08-25 12:14:00 · 798 阅读 · 0 评论 -
[原创]WCF后续之旅(13): 创建一个简单的WCF SOAP Message拦截、转发工具 - Part I
WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式。从Messaging的角度讲,WCF可以看成是对Message进行发送、传递、接收、基础的工具。对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端。实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发原创 2008-09-01 09:14:00 · 647 阅读 · 0 评论 -
[原创]WCF后续之旅(2): 如何对Channel Layer进行扩展——创建自定义Channel
在上一篇文章中,我们通过一个直接借助BasicHttpBinding对象实现Client和Server端进行通信的例子,对WCF channel layer进行了一个大致上的介绍。由此引出了一些列通信相关的概念和对象,比如Channel,Output channel, Input channel,Request channel, Reply Channel,Duplex channel,原创 2008-07-09 09:17:00 · 583 阅读 · 0 评论 -
[原创]WCF后续之旅(1): WCF是如何通过Binding进行通信的
《我的WCF之旅》系列自开篇以来,得到了园子里很多朋友的厚爱,并荣登了博客园2007年度系列博文Top 10。由于工作原因,沉寂了几个月,今天开始WCF新的旅程。如果说《我的WCF之旅》主要是对WCF基本原理概括性介绍,而对于这个新的系列,我将和大家分享我对WCF的一些实现机制、设计原理的理解,以及我在实际的项目开发中的一些实践经验(比如在后续的一些文章中,我将介绍通过WCF Exten原创 2008-07-08 09:17:00 · 832 阅读 · 0 评论 -
[原创]谈谈WCF中的Data Contract(4):WCF Data Contract Versioning
软件工程是一门独特的工程艺术,需要解决的是不断改变的需求变化。而对于WCF,对于SOA,由于涉及的是对多个系统之间的交互问题,如何有效地解决不断改变的需求所带来的问题就显得更为重要:Service端版本的变化能否保持现有Consumer的正常调用,Consumer端的改变不至于影响对Service 的正常调用。对于Data Contract来说就是要解决这样的问题:Service端或者C原创 2007-11-27 21:19:00 · 374 阅读 · 0 评论 -
[原创] WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]
在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常。在服务执行过程中,我们手工抛出FaultException异常,WCF服务端框架会对该异常对象进行序列化病最终生成Fault消息。当WCF客户端框架介绍到该Fault消息之后,会做一项相反的操作:对Fault消息中进行解析和反序列化,重新生成并抛出FaultException异常。原创 2009-10-29 19:05:00 · 4663 阅读 · 1 评论 -
[原创] WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[上篇]
对于上一篇文章 (WCF基本异常处理模式:[上篇]、[中篇]、[下篇]),主要是站在最终开发者的角度对WCF关于异常处理编程模式进行了介绍,接下来,我们需要将我们的目光转移到WCF框架内部,深入剖析整个WCF异常处理流程。在基于SOAP的消息交换过程中,异常最终通过Fault消息承载,所以很自然地,接下来的介绍从SOAP Fault说起。 一、 从SOAP Fault说起(基于SOAP原创 2009-10-28 20:08:00 · 4494 阅读 · 0 评论 -
[原创]WCF技术剖析之二十三:服务实例(Service Instance)生命周期如何控制[第1篇]
服务调用的目的体现在对某项服务功能的消费上,而功能的实现又定义在相应的服务类型中。不论WCF服务端框架处理服务调用请求的流程有多么复杂,最终都落实在服务实例的激活和操作方法的执行上面。WCF中的实例管理(Instance Management)旨在解决服务实例的激活和服务实例生命周期的控制。 会话(Session)的目的在于保持来自相同客户端(服务代理)多次服务调用之间的状态。从消息交原创 2009-11-05 20:06:00 · 5274 阅读 · 0 评论 -
[原创]WCF技术剖析之二十一:WCF基本异常处理模式[下篇]
从FaultContractAttribute的定义我们可以看出,该特性可以在同一个目标对象上面多次应用(AllowMultiple = true)。这也很好理解:对于同一个服务操作,可能具有不同的异常场景,在不同的情况下,需要抛出不同的异常。 1: [AttributeUsage(AttributeTargets.Method, AllowMultiple = true, In原创 2009-10-27 19:08:00 · 4162 阅读 · 1 评论 -
[原创] WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultException异常),其相关的错误信息仅仅限于服务端可见,并不会被WCF传递到客户端;如果将开启了IncludeExceptionDetailInFaults的ServiceDebug服务行为通过声明(通过在服务类型上应用ServiceBehaviorAttr原创 2009-10-22 18:10:00 · 3871 阅读 · 0 评论 -
[原创]WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
由于WCF采用.NET托管语言(C#和NET)作为其主要的编程语言,注定以了基于WCF的编程方式不可能很复杂。同时,WCF设计的一个目的就是提供基于非业务逻辑的通信实现,为编程人员提供一套简单易用的应用编程接口(API)。WCF编程模式的简单性同样体现在异常处理上面,本篇文章的主要目的就是对WCF基于异常处理的编程模式做一个简单的介绍。 一、当异常从服务端抛出 对于一个典型的WCF服务原创 2009-10-21 22:09:00 · 4545 阅读 · 0 评论 -
[原创]我的WCF之旅(5):面向服务架构(SOA)和面向对象编程(OOP)的结合——如何实现Service Contract的重载(Overloading)
对于.NET重载(Overloading)——定义不同参数列表的同名方法(顺便提一下,我们但可以在参数列表上重载方法,我们甚至可以在返回类型层面来重载我们需要的方法——页就是说,我们可以定义两个具有相同参数列表但不同返回值类型的两个同名的方法。不过这种广义的Overloading不被我们主流的.NET 语言所支持的——C#, VB.NET, 但是对于IL来说,这这种基于返回值类型的Ove原创 2007-03-19 02:29:00 · 484 阅读 · 0 评论 -
[原创]我的WCF之旅(1):创建一个简单的WCF程序
写在前面在Microsoft提出.NET战略以来, 先后推出了一系列产品和技术, 这些产品和技术为我们在.NET平台下建立企业级的分布式应用提供了很大的 便利。这些技术和产品包括:.NET Remoting,XML WebSerivce,WSE(2.0,3.0),Enterprise Service, MSMQ ......我们知道,和一个相对独立的应用不同,我们开发一个原创 2007-02-26 11:33:00 · 4298 阅读 · 1 评论 -
[原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication)
昨天写了一篇Remoting中如何实现双向通信的文章《<a title="[原创].NET remoting: 如何通过remoting实现双向通信(bidirectional communication)服务器托管服务商:零刻数据。" href="http://www.cnblogs.com/artech/archive/2007/03/01/660595.html">[原创].N原创 2007-03-02 17:31:00 · 3770 阅读 · 0 评论 -
[原创]我的WCF之旅(6):在Winform Application中调用Duplex Service出现TimeoutException的原因和解决方案
几个星期之前写了一篇关于如何通过WCF进行 双向通信的文章([原创]我的WCF之旅(3):在WCF中实现双向通信(Bi-directional Communication) ),在文章中我提供了一个如果在Console Application 调用Duplex WCF Service的Sample。前几天有个网友在上面留言说,在没有做任何改动得情况下,把 作为Client的Console原创 2007-03-29 00:29:00 · 542 阅读 · 0 评论 -
[原创]谈谈WCF中的Data Contract (1):Data Contract Overview
Contract in SO:Contract是对操作和数据的抽象 在我们看来,Service Orientation提供了一种对业务、功能进行分解的方式。针对SO,我们把一个具体的业务流程或者一个复杂的功能分解成一个个独立完成某项任务的子单元,这些子单元通过一个个Service来承载。对于Service本身来讲,他们应该是自治的,独自完成自己的功能、不依赖于其他的Service。原创 2007-11-27 20:19:00 · 639 阅读 · 0 评论 -
[原创]谈谈WCF中的Data Contract(2):WCF Data Contract对Generic的支持
通过第一部分的介绍,我们可以体会到,WCF 的Data Contract在CLR Type和Neutral Contract之间搭建了一座桥梁,弥合了.NET世界和厂商中立世界的差异。通过WCF Data Contract我们将CLR Data Type暴露成一个厂商中立的数据结构的描述,同样通过WCF Data Contract我们将一个现有的CLR Data Type和既定的Neut原创 2007-11-27 20:19:00 · 909 阅读 · 0 评论 -
[原创]谈谈WCF中的Data Contract(3):WCF Data Contract对Collection & Dictionary的支持
在本篇文章上一部分Order Processing的例子中,我们看到原本已Collection形式定义的DetailList属性(public IList DetailList),在Data Contract中却以Array的方式体现(public OrderDetail[] DetailList)。我们现在就来详细地讨论一下基于Collection & Dictionary 的Data原创 2007-11-27 20:19:00 · 485 阅读 · 0 评论 -
[原创]WCF后续之旅(14):TCP端口共享
在基于TCP/IP协议簇的对等网络通信下,相互通信的应用程序运行各自的进程中,出于应用层的进程将数据局封装成数据报,并通过传输层的TCP或者UDP进行网络通信。而TCP和UPD则通过一个16bit的端口来识别不同的应用程序。 对于一些常用网络服务,他们都有一个知名的端口好与之匹配。比如,FTP服务是用的TCP端口为21;Telnet服务的TCP端口为23等等。而对于客户端通常对所使用的原创 2008-09-16 09:14:00 · 992 阅读 · 0 评论 -
[原创]WCF后续之旅(15): 逻辑地址和物理地址
在WCF中,每个终结点都包含两个不同的地址——逻辑地址和物理地址。逻辑地址就是终结点Address属性表示的地址。至于物理地址,对于消息发送放来讲,就是消息被真正发送的目的地址;而对于消息的接收放来讲,就是监听器真正监听的地址。 一、服务端的物理地址 在默认的情况下,终结点的逻辑地址和物理地址是同一个URI。换句话说,终结的逻辑地址是必须的,如何物理地址没有指定的,默认使用逻辑地址作原创 2008-09-17 09:14:00 · 560 阅读 · 0 评论 -
[原创]WCF后续之旅(16): 消息是如何分发到Endpoint的--消息筛选(Message Filter)
在介绍终结点的ListenUriMode时,我们提到了两个特殊的对象ChannelDispatcher和ChannelListener。这两个对象在整个WCF的消息分发系统中具有重要的地位,在这节里,我们对WCF的整个消息分发过程作一个简单的介绍。 一、连接请求的监听 当我们通过ServiceHost对某个服务进行寄宿的时候,实际上WCF是在为我们创建一个监听器,并监听来自外界的服务访原创 2008-09-18 11:14:00 · 777 阅读 · 0 评论 -
[原创]WCF技术剖析之十一:异步操作在WCF中的应用(下篇)
说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实现。在定义服务契约的时候,相信大家已经注意到了OperationContractAttribute特性具有一个bool类型的AsynPattern。该属性可以将一个服务操作定义成异步实现模式,接下来的内容主要是着眼于介绍异步操作的定义和实现原理。 一原创 2009-07-08 22:08:00 · 640 阅读 · 0 评论 -
[原创]WCF技术剖析之十二:数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]大部分的系统都是以数据为中心的(Data Central),功能的实现表现在对相关数据的正确处理。而数据本身,是有效信息的载体,在不同的环境具有不同的表示。一个分布式的互联系统关注于数据的交换,而数据正常交换的根本前提是参与数据交换的双方对于数据结构的一致性理解。这就为数据原创 2009-07-09 21:08:00 · 836 阅读 · 0 评论 -
[原创]WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]DataContractSerializer承载着所有数据契约对象的序列化和反序列化操作。在上面一篇文章(《数据契约(Data Contract)和数据契约序列化器(DataContractSerializer)》)中,我们谈到DataContractSerializer基原创 2009-07-12 16:08:00 · 694 阅读 · 0 评论 -
[原创]WCF技术剖析之十四:泛型数据契约和集合数据契约(上篇)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]在.NET Framework 2.0中,泛型第一次被引入。我们可以定义泛型接口、泛型类型、泛型委托和泛型方法。序列化依赖于真实具体的类型,而泛型则刻意模糊了具体类型概念。而集合代表一组对象的组合,集合具有可迭代(Enumerable)的特性,可以通过某个迭代规则遍历集合中原创 2009-07-13 17:08:00 · 698 阅读 · 0 评论 -
[原创]WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]在.NET中,所有的集合都实现了IEnumerable接口,比如Array、Hashtable、ArrayList、Stack、Queue等。有的集合要求元素具有相同的类型,这种集合一般通过泛型的方式定义,它们实现另一个接口IEnumerable(IEnumerable本身原创 2009-07-14 18:08:00 · 1046 阅读 · 0 评论 -
WCF技术剖析(卷1)正式出版
【书 名】 WCF技术剖析(卷1) 【作 者】 蒋金楠 【出 版】 电子工业出版社 【书 号】 9787121089985 【出版日期】 2009 年7月 【开 本】 16 【页 码】 548 【字 数】 650千字 【内容简介】 本书从WCF的终结点谈起,对终结点的三要素进行了全面而深原创 2009-07-15 23:07:00 · 1202 阅读 · 0 评论 -
[原创]WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]]如果一个类型,不一定是数据契约,和给定的数据契约具有很大的差异,而我们要将该类型的对象序列化成基于数据契约对应的XML。反之,对于一段给定的基于数据契约的XML,要通过反序列化生成该类型的对象,我们该如何实现这样的场景? 比如下面定义了两个类型Contact和Custom原创 2009-07-20 18:07:00 · 737 阅读 · 0 评论