摘要: [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道《天天山海经》为此录制的节目视频(苏州话)]] 大部分的系统都是以数据为中心的(Data Central),功能的实现表现在对相关数据的正确处理。而数据本身,是有效信息的载体,在不同的环境具有不同的表示。一个分布式的互联系统关注于数据的交换,而数据正常交换的根本前提是参与数据交换的双方对于数据结构的一致性理解。WCF下的序列化(Serialization)解决的是如何将数据从对象的表现形式转变成XML表现形式,以确保数据的正常交换。从本章起,我将讲述WCF序列化的本质,首先从从数据契约谈起。 阅读全文
posted @ 2009-07-09 21:20 Artech 阅读(18679) 评论(11) 推荐(15)
摘要: 说完了客户端的异步服务调用(参阅WCF技术剖析之十一:异步操作在WCF中的应用(上篇)),我们在来谈谈服务端如何通过异步的方式为服务提供实现。在定义服务契约的时候,相信大家已经注意到了OperationContractAttribute特性具有一个bool类型的AsynPattern。该属性可以将一个服务操作定义成异步实现模式,接下来的内容主要是着眼于介绍异步操作的定义和实现原理。 阅读全文
posted @ 2009-07-08 22:56 Artech 阅读(11139) 评论(33) 推荐(10)
摘要: 按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作。对于前者,操作的执行主要利用CPU进行密集的计算,而对于后者,大部分的操作处理时间花在I/O操作处理,比如访问数据库、文件系统、网络资源等。对于I/O绑定型操作,我们可以充分利用多线程的机制,让多个操作在自己的线程并发执行,从而提高系统性能和响应能力。服务调用就是典型的I/O绑定型操作,所以多线程在服务调用中具有广泛的应用。在本篇文章中,我们专门来讨论多线程或者是异步操作在WCF中的具体应用。 阅读全文
posted @ 2009-07-08 21:14 Artech 阅读(15768) 评论(9) 推荐(12)
摘要: 在前面一片文章(服务代理不能得到及时关闭会有什么后果?)中,我们谈到及时关闭服务代理(Service Proxy)在一个高并发环境下的重要意义,并阐明了其根本原因。但是,是否直接调用ICommunicationObject的Close方法将服务代理关闭就万事大吉了呢?事情远不会这么简单,这其中还会涉及关于异常处理的一些操作,这就是本篇文章需要讨论的话题。 阅读全文
posted @ 2009-07-05 18:33 Artech 阅读(13178) 评论(27) 推荐(18)
摘要: 我们想对WCF具有一定了解的人都会知道:在客户端通过服务调用进行服务调用过程中,服务代理应该及时关闭。但是如果服务的代理不等得到及时的关闭,到底具有怎样的后果?什么要关闭服务代理?在任何时候都需要关闭服务代理吗?是否有一些例外呢?本篇文章将会围绕着这些问题展开。 阅读全文
posted @ 2009-07-04 17:58 Artech 阅读(13472) 评论(47) 推荐(16)
摘要: 和传统的分布式远程调用一样,WCF的服务调用借助于服务代理(Service Proxy)。而ChannelFactory则是服务代理的创建者。在客户端,我们具有两种典型的服务代理创建方式,其一是通过诸如SvcUtil.exe这样的工具导入服务的元数据生成相应的服务代理(一个继承自ClientBase的类型)代码和相关配置;其二是直接通过相应的终结点信息(通过代码指定或者配置)创建ChannelFactory对象,并借助该对象直接进行服务代理的创建。实际上,即使通过ClientBase对象进行服务调用,其内部也是调用ChannelFactory创建的服务代理。整个ChannelFactory的创建是一项相对复杂并且费时的工作,会涉及很多诸如反射、配置文件的读取等操作。为了提高服务调用的性能,在.NET 3.5中,WCF在ClientBase中引入了ChannelFac 阅读全文
posted @ 2009-07-03 20:36 Artech 阅读(16752) 评论(29) 推荐(11)
摘要: 我不知道在博客园首页发布者这样一个帖子,对于一个技术论坛性质的网站是否适合,为此在发文之前特意征得了DUDU的同意。标题所说的那个女孩名称程婷,是我一个同事的女朋友,于一个月前诊断出得了M7型急性白血病。之前,没有任何征兆,仅仅是确诊当天刷牙流血不止。医院的诊断犹如晴天霹雳,给我的同事和他们的家庭以沉重的打击。这个同事同时也是我很好的朋友,我在第一时间得到这个消息,我当时都不敢相信这是真的。每天下班都见到的一个活泼可爱的女孩,怎么突然“身患绝症”画上等号?这些本以为在韩剧中才能见到的故事,怎么可能突然降临到你我的身边? 阅读全文
posted @ 2009-07-01 19:10 Artech 阅读(9305) 评论(177) 推荐(5)
摘要: 在这之前,我写过深入介绍MS EnterLib PIAB的文章(参阅《MS Enterprise Library Policy Injection Application Block 深入解析[总结篇]》),也写过WCF与PIAB的集成(参阅:《WCF后续之旅(8):通过WCF Extension 实现与MS Enterprise Library Policy Injection Application Block 的集成》)、WCF与Unity的集成(参阅《WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成》)以及Unity与PIAB的集成(参阅《Enterprise Library深入解析与灵活应用(1):通过Unity Extension实现和Policy Injection Application Block的集成》、 阅读全文
posted @ 2009-06-29 16:03 Artech 阅读(9906) 评论(57) 推荐(7)
摘要: 在EnteLib中,PIAB(Policy Injection Application Block)和Unity的定位是轻量级的AOP框架和IoC容器(Container)。通过PIAB,我们可以将一些业务无关的crosscutting concern定义于相应的CallHandler中,通过Attribute声明或者配置应用到承载业务逻辑的目标方法上。而通过Unity提供的IoC容器(或者DI容器),即UnityContainer,很好地实现了依赖的动态注入,从而实现了组件之间、模块之间或者服务之间的松耦合。在本篇文章中,我们将关注如何将两者有机地关联起来。 阅读全文
posted @ 2009-06-28 23:12 Artech 阅读(8524) 评论(22) 推荐(6)
摘要: 本篇文章来源于几天前一个朋友向我咨询的问题。问题是这样的,他说他采用ASP.NET应用程序的方式对定义的WCF服务进行寄宿(Hosting),并使用配置的方式对服务的BaseAddress进行了设置,但是在创建ServiceHost的时候却抛出InvalidOperationException,并提示相应Address Scheme的BaseAddress找不到。我意识到这可能和WCF中用于判断服务寄宿方式的逻辑有关,于是我让这位朋友将相同的服务寄宿代码和配置迁移到GUI程序或者Console应用中,看看是否正常。结果如我所想,一切正常,个人觉得这应该是WCF的一个Bug。今天撰文与大家讨论,看看大家对这个问题有何见解。 阅读全文
posted @ 2009-06-26 19:33 Artech 阅读(10214) 评论(29) 推荐(12)
摘要: 在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。对于前者,WCF通过HttpModule实现了服务的寄宿,而对于后者,WCF的服务寄宿通过一个HttpHandler实现。只有在ASP.NET兼容模式下,我们熟悉的一些ASP.NET机制才能被我们使用,比如通过HttpContext的请求下下文;基于文件或者Url的授权;HttpModule扩展;身份模拟(Impersonation)等。 由于在ASP.NET兼容模式下,ASP.NET采用与.aspx Page完全一 阅读全文
posted @ 2009-06-25 18:17 Artech 阅读(15180) 评论(49) 推荐(18)
摘要: 通过《再谈IIS与ASP.NET管道》的介绍,相信读者已经对IIS和ASP.NET的请求处理管道有了一个大致的了解,在此基础上去理解基于IIS服务寄宿的实现机制就显得相对容易了。概括地说,基于IIS的服务寄宿依赖于两个重要的对象:System.ServiceModel.Activation.HttpModule和System. ServiceModel.Activation.HttpHandler。 阅读全文
posted @ 2009-06-24 20:33 Artech 阅读(15081) 评论(22) 推荐(12)
摘要: 在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析。在介绍IIS7.0的时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP的请求监听,在此基础上引入了三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP、Named Pipes和MSMQ的网络监听。由于IIS 7提供了基于非HTTP网络协议的监听支持,那么就意味着当我们当我们通过IIS进行WCF服务寄宿(Hosting)的时候,可以采用非HTTP的通信方式。在本篇文章中,我们将通过一个简单实例介绍进行非HTTP的IIS服务寄宿,Source Code下载a href ="http://fil 阅读全文
posted @ 2009-06-21 22:12 Artech 阅读(13938) 评论(58) 推荐(15)
摘要: 在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 Runtime Pipeline - Part I [原创]ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline - Part II 很多人留言为何没有IIS 7的介绍。在写作《WCF深入剖析》中,为了剖析基于IIS的WCF服务寄宿(Hosting),再次对相关内容进行了研究,在这里一并与大家分享。 阅读全文
posted @ 2009-06-20 00:19 Artech 阅读(50706) 评论(97) 推荐(147)
摘要: 细算起来,已经有好几个月没有真正的写过文章了。近半年以来,一直忙于我的第一本WCF专著《WCF技术剖析》的写作,一直无暇管理自己的 Blog。到目前为止《WCF技术剖析(卷1)》的写作暂告一段落,初步预计于下个月由武汉博文视点出版。在《WCF技术剖析》写作期间,对WCF又有了新的感悟,为此以书名开始本人的第三个WCF系列。本系列的目的在于对《WCF技术剖析》的补充,会对书中的一些内容进行展开讲述,同时会囊括很多由于篇幅的原因忍痛割弃的内容。本系列的第一篇,我将会对WCF的基本架构作一个大致的讲解。不过,一改传统对WCF的工作流程进行平铺直叙,我将另辟蹊径,借助于我们熟悉的ASP.NET作为请求处理平台,通过一个简a单的托管程序模拟整个WCF客户端和服务端的架构。本篇文章的大部分内容节选自《WCF技术剖析(卷1)》第八章。Source Code下载:a href="http://files.cnblogs. 阅读全文
posted @ 2009-06-18 21:24 Artech 阅读(40745) 评论(134) 推荐(104)
摘要: VS2010 Beta 1发布还一阵了,相信很多人已经开始尝鲜了。不知道大家有没有遇到过这样的问题:当打开VS2010的时候,出现这样一个初始化界面。但是几秒钟之后,初始化界面消失,但是VS2010的UI界面并没有出现。但是通过Task Manager查看进程列表,Devenv.exe进行却在运行。我先后遇到了两次,第一次是在Windows 7上安装VS 2010 Team Suit,我还以为是Windows 7的问题。昨天在Windows Server 2008上安装有遇到这样的问题,我以为是安装过程出现问题,于是卸掉重装,问题依然存在。在网上也没有找到任何相关信息,整整折腾了一天。后来通过通过命令行,对VS进行重新设置后解决了这个问题。 阅读全文
posted @ 2009-05-30 13:38 Artech 阅读(9293) 评论(26) 推荐(3)
摘要: 今天看到看到一篇MSDN文章《Parallelizing Operations With Dependencies》,作者是微软Parallel Computing Platform团队的一个开发经理。文中提供出一种用于并行执行一组具有依赖关系的操作的解决方案,这不由得想起我在一年之前写的一个具有相同的功能的组件。于是翻箱倒柜找了出来,进行了一些加工,与大家分享一下。 阅读全文
posted @ 2009-05-22 23:30 Artech 阅读(3959) 评论(22) 推荐(2)
摘要: 开门见山,下面的例子中通过调用ThreadPool.QueueUserWorkItem(WaitCallback callBack, object state)的方式实现异步调用: List actions = new List(); //...... foreach (var action in actions) { ThreadPool.QueueUserWorkItem(state = action(), null); } Console.Read(); 但是出现错误的输出结果...... 阅读全文
posted @ 2009-05-22 09:31 Artech 阅读(31240) 评论(46) 推荐(15)
摘要: Why don't you partition your table if you have millions of rows and get complaints about the degradation of performance? This is the question I asked my friend and I was amazed to find out he, along with many people, wasn't aware of this feature of SQL Server. This feature was first made available in SQL Server 2005, and today I will discuss what partitioning is. 阅读全文
posted @ 2009-04-30 08:34 Artech 阅读(2991) 评论(0) 推荐(2)
摘要: Are you creating a new Web site and developing a user registration system that requires new visitors to sign-up and create a user ID and password? Stop now and read this. There are now more effective approaches for dealing with Web accounts which are more powerful and are better for you and your users... 阅读全文
posted @ 2009-04-26 22:18 Artech 阅读(1818) 评论(4) 推荐(2)
摘要: 开门见山,使用MS Enterprise Library的DAAB(Data Access Application Block)获取数据时抛出异常。具体场景如下,通过Database对象的ExecuteReader执行两段Select语句,前一句是不合法的,后一句是正确的。为了避免第一次执行出错导致程序的终止,特意将其放到Try/Catch酷快中。两次数据库操作通过TrsanctionScope的形式纳入同一个Transaction中,具体的代码如下所示。 阅读全文
posted @ 2009-04-22 15:36 Artech 阅读(3559) 评论(24) 推荐(3)
摘要: In the last year or so, after quite a lull, the software architecture business has gotten rather exciting again. We're finally seeing major new topics emerging into the early mainstream that are potential game-changers, while at the same time a few innovations that have been hovering in the margins of the industry are starting to break out in a big way. The big changes: The hegemony of traditio 阅读全文
posted @ 2009-04-13 16:13 Artech 阅读(1990) 评论(1) 推荐(2)
摘要: 由于绑定对象由一系列有序的绑定元素组成,绑定元素最终决定着信道栈中信道的组成,而信道的组成最终又决定了信道栈对消息进行处理的方式和能力,所有要确定绑定的特性和能力,我们可以通过查看其绑定元素的构成来一窥究竟... ... 阅读全文
posted @ 2008-12-14 13:16 Artech 阅读(9312) 评论(17) 推荐(8)
摘要: 在上面的内容中,先后介绍了信道、信道管理器、信道监听器和信道工厂。从对象的创建来讲,信道管理器是信道的创建者。说的再具体点,客户端的信道通过信道工厂创建,服务端的信道通过信道监听器创建。但是信道工厂和信道监听器又是如果被创建出来的呢? 我们在一开始就已经说过,作为终结点三要素的绑定对象实现了所有的通信细节,并且通过创建信道栈实现了消息的传递。从这一点来说,绑定对象无疑是信道层所有通信对象的最终缔造者,所以信道工厂和信道监听器最终的创建都是靠绑定对象实现的。关于这个创建过程又和另一个重要的对象密切相关,那就是绑定元素。 阅读全文
posted @ 2008-12-05 17:24 Artech 阅读(8809) 评论(22) 推荐(10)
摘要: 由于信道管理器在客户端和服务端所起的不同作用,分为信道监听器和信道工厂。和服务端的信道监听其相比,处于客户端的信道工厂显得简单。从名称就可以看得出来,信道工厂的作用就是单纯的创建用于消息发送的信道。我们先来看看与信道工厂相关的一些接口和基类的定义。 阅读全文
posted @ 2008-12-05 17:11 Artech 阅读(10974) 评论(10) 推荐(7)
摘要: 基于Enterprise Library PIAB的AOP框架已经在公司项目开发中得到广泛的使用,但是最近同事维护一个老的项目,使用到了Enterprise Library 2,所以PIAB是在Enterprise Library 3.0中推出的,所以不同直接使用。为了解决这个问题,我写了一个通过方法劫持(Method Interception)的原理,写了一个简易版的AOP框架。 阅读全文
posted @ 2008-11-27 15:13 Artech 阅读(11925) 评论(46) 推荐(11)
摘要: 信道管理器是信道的创建者,一般来说信道栈的中每个信道对应着一个信道管理器。基于不同的消息处理的功能,将我们需要将相应的信道按照一定的顺序能组织起来构成一个信道栈,由于信道本身是由信道管理器创建的,所以信道对应的信道管理器也构成一个信道管理器栈,栈中信道管理器的顺序决定由它所创建信道的顺序。 对于WCF的信道层来说,信道管理器在服务端和客户端扮演着不同的角色,服务端的信道管理器在于监听来自客户端的请求,而客户端的信道仅仅是单纯的创建用于消息发送的信道。因此,客户端的消息管理器又称为信道监听器(Channel Listener),客户端的信道管理器则成为信道工厂(channel factory)。 阅读全文
posted @ 2008-11-18 12:00 Artech 阅读(10045) 评论(22) 推荐(10)
摘要: 这个工具执行一组批处理,也可以看成是一个Sequential Workflow的执行器,我把它成为Batch Job Executor。在使用Batch Job Executor过程中,通过配置可以对批处理的每个步骤、或者是Workflow的每个Activity进行自由地定义。从功能上将,这个小工具仅仅是个小玩意儿,不登大雅之堂。 不过考虑到Batch Job Executor的涉及和实现是基于Enterprise Library典型的实现方式,比如基于EL的配置和对象创建方式,对于那些希望进一步了解EL的读者,或许可以通过这个小小的例子一窥EL的设计原理。对于那些EL的设计不时很了解的读者,对于以下的内容,可能在理解上可能比较困难。最好是下载源代码,结合下面的介绍,希望会帮助了更好的理解EL。 阅读全文
posted @ 2008-11-17 11:07 Artech 阅读(6038) 评论(8) 推荐(2)
摘要: WCF采用基于消息交换的通信方式,而绑定则实现了所有的通信细节。绑定通过创建信道栈实现了消息的编码与传输,以及对WS-*协议的实现。在这一节中,我们就来着重介绍WCF中的信道和信道栈。 阅读全文
posted @ 2008-11-14 11:05 Artech 阅读(11275) 评论(7) 推荐(15)
摘要: 下面通过一个简单的Console Application演示Type Innitializer的执行顺序。希望大家各抒己见,对于实验的结果给出一个圆满的解释,同时希望读者从中理解到更多关于编译、关于CLR一些被我们忽略的细节。 阅读全文
posted @ 2008-11-01 15:57 Artech 阅读(7093) 评论(21) 推荐(5)
摘要: [From J.D Meier’s Blog:http://blogs.msdn.com/jmeier/default.aspx] Today we released our patterns & practices App Arch Guide 2.0 Beta 1. This is our guide to help solution architects and developers make the most of the Microsoft platform. It's a distillation of many lessons learned. It’s principle-based and pattern-oriented to provide 阅读全文
posted @ 2008-10-28 15:28 Artech 阅读(4216) 评论(6) 推荐(2)
摘要: 对于稍微有点经验的.NET开发人员来说,倘若被问及如何保持线程同步,我想很多人都能说好好几种。在众多的线程同步的可选方式中,加锁无疑是最为常用的。如果仅仅是基于方法级别的线程同步,使用System.Runtime.CompilerServices.MethodImplAttribute无疑是最为简洁的一种方式。MethodImplAttribute可以用于instance method,也可以用于static method。当在某个方法上标注了MethodImplAttribute,并指定MethodImplOptions.Synchronized参数,可以确保在不同线程中运行的该方式以同步的方式运行。我们几天来讨论MethodImplAttribute(MethodImplOptions.Synchronized)和lock的关系。 阅读全文
posted @ 2008-10-17 09:16 Artech 阅读(12832) 评论(29) 推荐(18)
摘要: 微软Enterprise Library ELAB(Exception Handling Application Block)提供了一种基于策略(Policy)的异常处理方式,在不同的环境中,比如多层架构中不同的层次中,我们可以定义不同的异常处理策略。对于ELAB来说,Exception Handling Policy = Exception Type + Exception Handler(s) ,也就是说异常处理策略规定了对于某种类型的类型需要通过那些Exception Handler去处理。从这种意义上讲,ELAB的异常处理机制是基于Exception Type的,异常的类型是我们处理异常的最小粒度。对于一个确定的异常处理策略,在不同场合抛出的同种类型的异常,都会使用相同的Exception Handler去处理。在很多情况下,这种基于异常类型级别的异常处理并不能解决我们实际异常处理的问题。 阅读全文
posted @ 2008-09-26 10:46 Artech 阅读(8050) 评论(14) 推荐(4)
摘要: WCF的通信是基于消息的,如果从消息交换(message exchange)的角度讲,信道层则可以看成是进行消息交换参与者之间的中介。信道层通过一个个信道组成一个连续的channel stack,该channel stack构成了一个消息流通的管道。消息的发送者通过该管道流到消息的接收者,消息的接收者对消息进行相应的处理,生成新的消息通过该管道回复给消息的发送者。本文将着重介绍WCF中的Binding模型,从该模型中,读者将会对WCF如何通过Binding创建channel stack的整个过程有一个大致的了解。 阅读全文
posted @ 2008-09-22 08:53 Artech 阅读(15818) 评论(28) 推荐(17)
摘要: 对于希望对WCF的消息交换有一个深层次了解的读者来说,tcpTracer绝对是一个不可多得好工具。我们将tcpTracer置于服务和服务代理之间,tcpTracer会帮助我们接获、显示和转发流经他的消息。 从本质上讲,tcpTracer是一个路由器。当启动的时候,我们需要设置两个端口:原端口(source port)和目的端口(destination port),然后tcpTracer就会在原端口进行网络监听。一旦请求抵达,他会截获整个请求的消息,并将整个消息显示到消息面板上。随后,tcpTracer会将该消息原封不动地转发给目的端口。在另一方面,从目的端口发送给原端口的消息,也同样被tcpTracer截获、显示和转发。 阅读全文
posted @ 2008-09-19 15:56 Artech 阅读(9164) 评论(26) 推荐(5)
摘要: 在上一篇介绍逻辑地址和物理地址文章中,我们介绍了终结点的ListenUriMode, 我们提到了两个特殊的对象ChannelDispatcher和ChannelListener。这两个对象在整个WCF的消息分发系统中具有重要的地位,在这节里,我们对WCF的整个消息分发过程作一个简单的介绍。 阅读全文
posted @ 2008-09-18 11:56 Artech 阅读(9250) 评论(14) 推荐(5)
摘要: 在WCF中,每个终结点都包含两个不同的地址——逻辑地址和物理地址。逻辑地址就是终结点Address属性表示的地址。至于物理地址,对于消息发送放来讲,就是消息被真正发送的目的地址;而对于消息的接收放来讲,就是监听器真正监听的地址... 阅读全文
posted @ 2008-09-17 09:32 Artech 阅读(10367) 评论(23) 推荐(7)
摘要: 在一般的网络环境中,尽可能避免网络攻击,都会通过防火墙将绝大部分的端口封掉,仅仅保留那些常用的网络服务所用的端口,或者为某一个类应用保留少量的端口。总而言之,我们不能保证每个跨防火墙通信的应用都具有一个唯一的端口,他们只能共享一个或者少量的几个端口。 无论是基于Intranet还是Internet,无论是采用何种传输协议,端口共享——让多个网络应用程序使用相同的端口进行通信,都具有重要的现实意义。 对于采用不同的传输协议,我们有不同的解决方案,对于HTTP协议,我们可以通过IIS的寄宿方式实现端口的共享,对于TCP,.NET Framework3.0提供了一个特殊的Windows服务,Net.TCP Port Sharing Service,帮助我们轻松的实现端口的共享。我们接下来就讨论这种端口共享解决方案 阅读全文
posted @ 2008-09-16 09:23 Artech 阅读(17102) 评论(23) 推荐(10)
摘要: 在Part I 中,我们创建了一个InterceptService,并且通过一个特殊的EndpointBehavior,ClientViaBehavior实现了message的拦截、转发功能。在本节中,我们将讨论另外一种不同的实现方式。如何说ClientViaBehavior是基于Client端的实现方式,那么我们今天讨论的是基于Service的实现方式。 阅读全文
posted @ 2008-09-02 09:20 Artech 阅读(7481) 评论(24) 推荐(6)
摘要: WCF是.NET平台下实现SOA的一种手段,SOA的一个重要的特征就基于Message的通信方式。从Messaging的角度讲,WCF可以看成是对Message进行发送、传递、接收、基础的工具。对于一个消息交换的过程,很多人只会关注message的最初的发送端和最终的接收端。实际上在很多情况下,在两者之间还存在很多的中间结点(Intermediary),这些中间结点在可能在实际的应用中发挥中重要的作用。比如,我们可以创建路由器(Router)进行消息的转发,甚至是Load Balance;可以创建一个消息拦截器(Interceptor)获取request或者response message,并进行Audit、Logging和Instrumentation。今天我们就我们的目光转向这些充当着中间人角色的Intermediary上面来。 阅读全文
posted @ 2008-09-01 09:37 Artech 阅读(14101) 评论(20) 推荐(12)