摘要: 在《上篇》中,我通过一个具体的实例演示了WCF服务宿主的同步上下文对并发的影响,并简单地介绍了同步上下文是什么东东,以及同步上下文在多线程中的应用。那么,同步上下文在WCF并发体系的内部是如何影响服务操作的执行的呢?这实际上涉及到WCF的一个话题,即线程的亲和性,本篇文章将为你剖析WCF线程亲和机制的本质。 阅读全文
posted @ 2010-04-08 19:40 Artech 阅读(5798) 评论(18) 推荐(6)
摘要: WCF并发体系下的同步机制是通过对InstanceContext进行加锁实现的,按照这样的理论,对于PerCall实例上下文模式,不论采用怎样的并发模式,服务操作应该是并发执行的;对于PerSession和Single实例上下文模式,如果采用Multiple并发模式,服务操作也应该是并发执行的。但是,一定是这样吗? 阅读全文
posted @ 2010-04-07 23:22 Artech 阅读(7579) 评论(12) 推荐(11)
摘要: 对于正常的服务调用,从客户端发送到服务端的请求消息最终会被WCF服务运行时分发到实例上下文中。对于回调场,回调对象也是封装到实例上下文中,并将其封送到客户端。服务调用与回调,并没有本质的不同。本篇文章讲通过《实践重于理论》中的实例,综合分析WCF对并发服务调用和并发回调的处理机制。 阅读全文
posted @ 2010-03-31 18:41 Artech 阅读(6316) 评论(19) 推荐(5)
摘要: 由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的,所以在不同的实例上下文模式下,会表现出不同的并发行为。本篇文章将以以实例演示加原理分析相结合的方式对不同实例上下文模式下的并发实现机制进行深度剖析... 阅读全文
posted @ 2010-03-30 20:17 Artech 阅读(7188) 评论(15) 推荐(15)
摘要: “异常处理对于最终的开发人员是透明的”,就我个人的项目经验来讲,这是一种理想的状态。由于异常策略是一般是通过配置动态配置的,不需要反映在代码上面。如果能够通过框架的方式提供异常处理的实现,使开发人员无需编写任何异常处理的代码,只需要关注业务流程的实现就可以了,这不仅能够提高开发的效率,也能够提高系统的可维护性。 阅读全文
posted @ 2010-03-26 21:33 Artech 阅读(19598) 评论(92) 推荐(73)
摘要: 在差不多两年的时间内,我们项目组几十来号人都扑在一个项目上面。这是一个基于SCSF的项目,客户是墨尔本一家事业单位。前两周,我奉命负责对某个模块进行审核工作,在此期间,发现了一些问题,也有了一些想法。不过,有些想法可能还不是很成熟,不能完全保证其正确性,有机会写出来讨论一下。今天来说说关于MVP的一些想法。 阅读全文
posted @ 2010-03-25 22:38 Artech 阅读(20832) 评论(73) 推荐(51)
摘要: 由于WCF的并发是针对某个封装了服务实例的InstanceContext而言的,所以在不同的实例上下文模式下,会表现出不同的并发行为。接下来,我们从具体的实例上下文模式的角度来剖析WCF的并发处理机制。为了使读者对采用不同实例上下文对并发的影响有一个深刻的认识,会创建一个简单的WCF应用,并在此基础上添加监控功能,主要监控各种事件的执行时间,比如客户端服务调用的开始和结束时间,服务操作开始执行和结束执行的时间等等。读者可以根据实时输出的监控信息,对WCF的并发处理情况有一个很直观的认识。 阅读全文
posted @ 2010-03-22 19:19 Artech 阅读(8545) 评论(13) 推荐(13)
摘要: 正如您可能所了解的那样,多个微软 Windows版本在未来一年内将渐渐退出并不再提供技术支持.Windows 2000 Professional and Windows 2000 Server 自它发布之日起已经差不多10年,微软将于2010年7月13日结束支持。 Windows XP于2001年发布。对 Windows XP的支持还将继续,但是Service Pack 2将于2010年7月13日结束支持。至此,微软将不再提供对Windows XP SP2免费安全更新。需要获得Windows XP平台持续的技术支持,需要安装Windows XP SP3. 不包含Service Packs的Windows Vista将于2010年4月13日结束支持,如果需要在Windows Vista平台的持续支持,必须安装Windows Vista Service Packs 2. 阅读全文
posted @ 2010-03-22 12:36 Artech 阅读(2633) 评论(4) 推荐(2)
摘要: 在《WCF 并发的本质》中,我们谈到了WCF提供的三种不同的并发模式,使开发者可以根据具体的情况选择不同的并发处理的策略。对于这三种并发模式,Multiple采用的并行的执行方式,而Single和Reentrant则是采用串行的执行方式。串行执行即同步执行,在WCF并发框架体系中,这样的同步机制是如何实现的呢? 阅读全文
posted @ 2010-03-21 18:49 Artech 阅读(9116) 评论(10) 推荐(11)
摘要: 并发的含义就是多个并行的操作同时作用于一个相同的资源或者对象,或者说同一个资源或者对象同时应付多个并行的请求。对于WCF的并发来说,这里将的“资源或者对象”指的就是承载服务操作最终执行的服务实例。而WCF将服务实例封装在一个称为实例上下文对象中,所以WCF中的并发指的是同一个服务实例上下文同时处理多个服务调用请求。 阅读全文
posted @ 2010-03-19 20:33 Artech 阅读(18391) 评论(50) 推荐(19)
摘要: [续《上篇》]TransactionFlow选项通过TransactionFlowAttribute这个操作契约写入绑定上下文,由事务绑定创建的事务信道获取该选项并以此作为首否对事务实施传播(发送或者接收)的依据。但是整个WCF事务还有一个重要的步骤需要实现:如何将通过OperationBehaviorAttribute特性标记为TransactionRequired的操作的执行自动纳入到流入的事务之中。接下来,我们就来着重讨论这个问题。 阅读全文
posted @ 2010-03-18 19:32 Artech 阅读(3278) 评论(17) 推荐(6)
摘要: WCF事务编程主要涉及到这么三个方面:通过服务(操作)契约确定TransactionFlow的策略;通过事务绑定实现事务流转;通过服务操作行为控制事务的自动登记(Enlistment)行为,以及对事务超时时限、隔离级别和实例行为的设定。那么,在WCF内部这三者之间究竟是如何通过相互协作实现分布式事务的呢?这就是本篇文章所要讲述的内容 阅读全文
posted @ 2010-03-17 18:56 Artech 阅读(3874) 评论(18) 推荐(7)
摘要: 在完成了对于WCF事务编程(《上篇》、《中篇》、《下篇》)的介绍后,本篇文章将提供一个完整的分布式事务的WCF服务应用,通过本例,读者不仅仅会了解到如何编程实现事务型服务,还会获得其他相关的知识,比如DTC和AS-AT的配置等。 阅读全文
posted @ 2010-03-16 19:04 Artech 阅读(5439) 评论(65) 推荐(8)
摘要: 在WCF事务编程模型下,通过服务契约确定事务流转的策略(参阅《上篇》),通过事务绑定实施事务的流转(参阅《中篇》)。但是,对于事务绑定接收到并成功创建的事务来说,服务操作的执行是否需要自动登记到该事务之中,以及服务操作采用怎样的提交方式,这就是服务端自己说了算了。 阅读全文
posted @ 2010-03-15 00:48 Artech 阅读(4504) 评论(5) 推荐(9)
摘要: 续《上篇》]通过将TransactionFlowAttribute特性应用在服务契约的某个操作之上,并指定相应的TransactionFlowOption枚举直,仅仅定义了事务流转的策略而已。至于WCF框架是否有能力对事物进行流转,按照怎样的协议进行流转,则是通过绑定实现的,本篇着重介绍绑定对事务流转的支持. 阅读全文
posted @ 2010-03-12 19:40 Artech 阅读(4830) 评论(11) 推荐(10)
摘要: WCF事务编程其实很简单,可以用三句话进行概括:通过服务契约决定事物流转(Transaction Flow)的策略;通过绑定实施事务的流转;通过服务行为控制事务的相关行为。本篇文章着重介绍如果通过TransactionFlowAttribute特性定义事务流转策略。 阅读全文
posted @ 2010-03-11 18:48 Artech 阅读(5692) 评论(17) 推荐(11)
摘要: 在年前写一个几篇关于分布式事务的文章,实际上这些都是为了系统介绍WCF事务处理体系而提供的相关的背景和基础知识。今天发最后一篇,介绍分布式事务采用的两种协议,即OleTx和WS-AT,内容比较枯燥,但对于后续对WCF事务处理框架进行深入剖析的系列文章来说,确实不可以缺少的。 阅读全文
posted @ 2010-03-11 00:16 Artech 阅读(5179) 评论(10) 推荐(5)
摘要: 在应用开发中,我们经常需要设置一些上下文(Context)信息,这些上下文信息一般基于当前的会话(Session),比如当前登录用户的个人信息;或者基于当前方法调用栈,比如在同一个调用中涉及的多个层次之间数据。在这篇文章中,我创建了一个称为ApplicationContext的组件,对上下文信息进行统一的管理。 阅读全文
posted @ 2010-02-25 21:00 Artech 阅读(11886) 评论(53) 推荐(23)
摘要: 前几天在家里测试一个基于WS-AT的分布式应用,但是连接公司网络的VPN出现了问题,不得不采用VPC在本机搭建一个局域网。虽然以前也做过这样的尝试,可能是很久没有弄过了,一些细节记不清了,所以也折腾了好一阵子。在这里,我特意写一篇文章来介绍基于VPC搭建局域网的整个步骤,没有什么技术含量,只当给具有相同需要的朋友多一个参考。 阅读全文
posted @ 2010-02-08 00:06 Artech 阅读(6621) 评论(19) 推荐(4)
摘要: 在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中。服务对外提供统一的接口,服务之间采用标准的通信方式进行交互,各个单一的服务精又有效的组合、编排成为一个有机的整体。在这样一个分布式系统中某个活动(Activity)的实现往往需要跨越单个服务的边界,如何协调多个服务之间的关系使之为活动功能的实现服务,涉及到SOA一个重要的课题:服务协作(Service Coordination)。而具体来讲,一个分布式的活动可能会执行几秒钟,比如银行转帐;也可能执行几分钟、几个小时、几天甚至更长,比如移民局处理移民的申请。事务,无疑是属于短暂运行服务协作(Short-Running Service Coordination)的范畴。 阅读全文
posted @ 2010-01-31 13:22 Artech 阅读(42630) 评论(18) 推荐(20)
摘要: 在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法。该方法对用于创建基于现有Transaction对象的“依赖事务(DependentTransaction)”。不像可提交事务是一个独立的事务对象,依赖事务依附于现有的某个事务(可能是可提交事务,也可能是依赖事务)。依赖事务可以帮助我们很容易地编写一些事务型操作,当环境事务不存的时候,可以确保操作在一个独立的事务中执行;当环境事务存在的时候,则自动加入其中。 阅读全文
posted @ 2010-01-31 09:19 Artech 阅读(12032) 评论(16) 推荐(19)
摘要: 在.NET 1.x中,我们基本是通过ADO.NET实现对不同数据库访问的事务。.NET 2.0为了带来了全新的事务编程模式,由于所有事务组件或者类型均定义在System.Transactions程序集中的System.Transactions命名空间下,我们直接称基于此的事务为System.Transactions事务。System.Transactions事务编程模型使我们可以显式(通过System.Transactions.Transaction)或者隐式(基于System.Transactions.TransactionScope)的方式进行事务编程。 阅读全文
posted @ 2010-01-30 16:49 Artech 阅读(23425) 评论(21) 推荐(36)
摘要: [续上篇]当基于LTM或者KTM的事务提升到基于DTC的分布式事务后,DTC成为了本机所有事务型资源管理器的管理者;此外,当一个事务型操作超出了本机的范围,出现了跨机器的调用后,本机的DTC需要于被调用者所在机器的DTC进行协助。上级对下级(包括本机DTC对本机所有资源管理器,以及上下级DTC)的管理得前提是下级在上级那里登记,即事务登记(Transaction Enlist)。所有事务参与者,包括所有资源管理器和事务管理器(即DTC)在进行了事务等级完成之后形成了一个树形的层级结构,该结构的形成是后续的事务提供成为可能,因此我们将其称之为事务提交树(Transaction Commit Tree)。 阅读全文
posted @ 2010-01-27 22:41 Artech 阅读(16095) 评论(29) 推荐(21)
摘要: 通过上一篇的介绍,我们知道了SOA真正需要的是一个能够协调服务操作直接(通过服务自身访问的资源)或者间接(通过被调用服务访问的资源)访问的所有资源的分布式事务管理系统,这是一个复杂的架构体系。WCF,作为Windows平台下基于SOA的分布式框架,对分布式事务提供全面的支持。不过,WCF并不是另起炉灶,而是充分地利用了Windows现有的事务控制基础架构。本节着重讨论Windows事务处理模型,首先来看看在这个模型中各个事务参与者各自扮演怎样的角色。 阅读全文
posted @ 2010-01-27 21:42 Artech 阅读(21439) 评论(13) 推荐(17)
摘要: 在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中。服务对外提供统一的接口,服务之间采用标准的通信方式进行交互,各个单一的服务精又有效的组合、编排成为一个有机的整体。在这样一个分布式系统中某个活动(Activity)的实现往往需要跨越单个服务的边界,如何协调多个服务之间的关系使之为活动功能的实现服务,涉及到SOA一个重要的课题:服务协作(Service Coordination)。而具体来讲,一个分布式的活动可能会执行几秒钟,比如银行转帐;也可能执行几分钟、几个小时、几天甚至更长,比如移民局处理移民的申请。事务,无疑是属于短暂运行服务协作(Short-Running Service Coordination)的范畴。 阅读全文
posted @ 2010-01-26 22:57 Artech 阅读(37510) 评论(45) 推荐(47)
摘要: 在《上篇》中,我通过使用Delegate的方式解决了服务调用过程中的异常处理以及对服务代理的关闭。对于《WCF技术剖析(卷1)》的读者,应该会知道在第7章中我通过类似于AOP的方式解决了相似的问题,现在我们来讨论这个解决方案。 阅读全文
posted @ 2010-01-08 20:49 Artech 阅读(8570) 评论(30) 推荐(10)
摘要: 在进行基于会话信道的WCF服务调用中,由于受到并发信道数量的限制,我们需要及时的关闭信道;当遇到某些异常,我们需要强行中止(Abort)信道。在真正的企业级开发中,正如我们一般不会让开发人员手工控制数据库连接的开启和关闭一样,我们一般也不会让开发人员手工去创建、开启、中止和关闭信道,这些工作是框架应该完成的操作。这篇文章,我们就来介绍如果通过一些编程技巧,让开发者能够无视“信道”的存在,像调用一个普通对象一样进行服务调用。 阅读全文
posted @ 2010-01-04 19:46 Artech 阅读(10628) 评论(47) 推荐(12)
摘要: 《WCF技术剖析(卷1)》自出版以来,深受广大WCF爱好者的厚爱,并入围了51CTO 2009年度"最受读者欢迎的IT图书作者"评选,如果你觉得觉得这本书对你学习和使用WCF还有点帮助,你不妨投上一票(同时入围的还有园子里的"一哥"李会军同志)。投票地址:http://book.51cto.com/exp/bookrating2009/author.php/ 阅读全文
posted @ 2009-12-30 18:10 Artech 阅读(2239) 评论(14) 推荐(6)
摘要: 我们有两种典型的WCF调用方式:通过SvcUtil.exe(或者添加Web引用)导入发布的服务元数据生成服务代理相关的代码和配置;通过ChannelFactory创建服务代理对象。在这篇文章中,我们采用一种独特的方式进行服务的调用。 阅读全文
posted @ 2009-12-29 19:41 Artech 阅读(9429) 评论(28) 推荐(7)
摘要: 元数据的发布方式决定了元数据的获取行为,WCF服务元数据架构体系通过ServiceMetadataBehavior实现了基于WS-MEX和HTTP-GET的元数据发布,针对这两种不同的协议,元数据获取的实现方式也是不同的,本片文章中通过自己的方式进行元数据获取,可以看成是对WCF客户端元数据框架的模拟。 阅读全文
posted @ 2009-12-28 18:46 Artech 阅读(5081) 评论(16) 推荐(8)
摘要: 在上篇文章中,我通过程序模拟了基于WS-MEX模式下元数据的发布,现在我们来模拟另外一中元数据发布模式:HTTP-GET,这两个模拟程序不仅仅会帮助你深刻地理解WCF的元数据发布机制,对你进一步认识WCF服务端的分发体系具有重要的帮助。 阅读全文
posted @ 2009-12-27 17:50 Artech 阅读(4459) 评论(1) 推荐(4)
摘要: 通过《如何将一个服务发布成WSDL[编程篇]》的介绍我们知道了如何可以通过编程或者配置的方式将ServiceMetadataBehavior这样一个服务形式应用到相应的服务上面,从而实现基于HTTP-GET或者WS-MEX的元数据发布机制。那么在WCF内部具体的实现原理又是怎样的呢?相信很多人对此都心存好奇,本篇文章的内容将围绕着这个主题展开。 阅读全文
posted @ 2009-12-26 18:35 Artech 阅读(3641) 评论(3) 推荐(3)
摘要: 对于WCF服务端元数据架构体系来说,通过MetadataExporter将服务的终结点导出成MetadataSet,仅仅是完成了一半的工作。被成功导出的以MetadataSet对象表示的元数据需要最终作为可被访问的网络资源发布出来,才能被服务消费者获取,进而有效地帮助他们进行服务调用。元数据的发布最终是通过ServiceMetadataBehavior这样一个服务行为实现的。 阅读全文
posted @ 2009-12-25 18:35 Artech 阅读(9286) 评论(13) 推荐(8)
摘要: 通过《实现篇》对WSDL元素和终结点三要素的之间的匹配关系的介绍,我们知道了WSDL的Binding元素来源于终结点的绑定对象,那么这些基于Binding的元数据以及相应的策略断言是如何被写入WSDL的呢?WSDL导出扩展(WSDL Export Extension)和策略导出扩展(Policy Export Extension)就是为此设计的。 阅读全文
posted @ 2009-12-24 20:30 Artech 阅读(3415) 评论(6) 推荐(1)
摘要: 元数据的导出就是实现从ServiceEndpoint对象向MetadataSet对象转换的过程,在WCF元数据框架体系中,元数据的导出工作由MetadataExporter实现。MetadataExporter是一个抽象类型,定义了导出元数据的基本行为。WCF定义一个具体的MetadataExporter:WsdlExporter,将基于某个终结点的元数据导出生成基于WSDL的MetadataSet。我们先来认识MetadataExporter和MetadataSet。 阅读全文
posted @ 2009-12-23 19:46 Artech 阅读(4750) 评论(4) 推荐(5)
摘要: 在[WS标准篇]中我花了很大的篇幅介绍了WS-MEX以及与它相关的WS规范:WS-Policy、WS-Transfer和WSDL,因为WCF元数据结构体系完全是基于WS-MEX等相关的规范之上。熟悉这些基本的WS规范,对于我们全面、深刻的理解WCF整个元数据架构体系具有十分重要的意义。接下来我们具体来介绍基于MetadataSection和MetadataSet基于两个类型的元数据表示。 阅读全文
posted @ 2009-12-22 18:51 Artech 阅读(4143) 评论(15) 推荐(5)
摘要: 微软EnterLib的PIAB是一个比较好用的轻量级的AOP框架,自身也提供了一系列的CallHandler,其中CachingCallHandler直接利用HttpRuntime的Cache实现了基于方法级别的缓存。但是,PIAB发布到现在,CachingCallHandler就一直存着一个问题:如果目标方法具有Out参数并且返回类型不是void,会抛出IndexOutOfRangeException,如果返回类型为void,out参数也不会被缓存。不知道微软对此作何考虑,反正我觉得这是一个不可原谅的Bug。 阅读全文
posted @ 2009-12-21 23:07 Artech 阅读(3115) 评论(23) 推荐(4)
摘要: 在《WCF技术剖析(卷1)》中,我多次向读者强调WCF进行通信的本质:终结点是客户端和服务端进行通信的手段。服务的提供者通过一个或者多个终结点将服务发布出来;服务的消费者则通过创建于之匹配的终结点进行服务的调用。站在服务消费者的角度,这样一个“匹配”的终结点该如何创建呢?或者说客户端基于何种信息创建能够有效调用目标服务的终结点呢?这就是元数据需要解决的问题。 阅读全文
posted @ 2009-12-20 12:05 Artech 阅读(5978) 评论(19) 推荐(4)
摘要: 通过上一篇了解了模块内基本的层次划分之后,接下来我们来聊聊PetShop中一些基本基础功能的实现,以及一些设计、架构上的应用如何同WCF进行集成。本篇讨论两个问题:实现分布式的Membership和客户端到服务端上下文(Context)的传递。 阅读全文
posted @ 2009-12-07 18:30 Artech 阅读(4884) 评论(33) 推荐(6)
摘要: 在上篇中我们谈到:将一个生命周期较短的对象(对象A)注册到一个生命周期较长(对象B)的某个事件(Event)上,两者便无形之间建立一个引用关系(B引用A)。这种引用关系导致GC在进行垃圾回收的时候不会将A是为垃圾对象,最终使其常驻内存(或者说将A捆绑到B上,具有了和B一样的生命周期)。这种让无用的对象不能被GC垃圾回收的现象,在托管环境下就是一种典型的内存泄漏问题。我们今天将会着重解释其背后的原因。 阅读全文
posted @ 2009-12-06 22:57 Artech 阅读(7336) 评论(35) 推荐(16)