【TechTarget中国原创】问:我们正在通过Web服务发布一些接口。Web服务只是完成部分的工作。需要完成的任务是:客户能够使这个Web服务参与到由客户端引发的事务处理中。问题是:客户能够通过其他的非Web服务的组件来执行重新运行或者执行更新,但是它们不会使用那些通过Web服务已经完成的组件来这样做。Web服务和客户端都是用.NET实现的。我已经读过WS-Atomic Transaction规范,但是我仍在努力寻找一种支持它的架构。
你遇到过类似的问题么?如果是的,可以和我分享你的经验并推荐一个支持这个说明的架构给我么?
答:你正在寻找的是.NET 的下一代Indigo。Indigo将提供一个面向服务的程序设计模型,该模型封装了升级事务处理的过程:从简单的不需要分布式事务处理协调程序(DTC)的事务处理到支持交叉处理和分布式.NET组件的激活DTC的事务处理、到需要WS-Atomic Transaction的Web服务事务处理。上述的所有过程都是通过一个类似的说明性的(隐含的)程序设计模型完成的,这个模型按现状已经完成,它使用.NET 1.1中的EnterpriseServices。一个明确的程序设计模型对于更强的控制而言也是可用的。当前,在.NET2.0中,一个功能的事务处理集合已经是可用的。例如,当多于一个的资源管理程序(Resource Manager)参与进事务处理中时,简单事务处理管理(LTM)将会自动升级为DTC事务处理。
如果你希望通过1.x的背景来了解更多的关于2.0事务处理的信息,请阅读我同事Juval Lowy所著的白皮书。
因此,你现在可以做什么呢?唉,我想只能是原地打转。在我看来,如果你设法实现你自己的WS-Coordination (WS-COOR) 和WS-AtomicTransaction (WS-AT)的管道,那么你需要经历一段漫长艰难的过程。你最好不要再等待了,把这个管道自由开放。请注意,WS-Coordination 和WS-AtomicTransactions规范的实现虽然还很遥远,而且还没有被批准。但是当这些都成为事实的时候,平台支持在.NET和Java这两方的平台上都可以实现了。它们可以处理所有的状态管理和满足把服务操作融入事务处理之中的XML串行化需求,而且你仍可以像现在一样把发布的事务处理属性应用到操作中去。
我需要再强调一下,在Java方面,有一些供应商平台已经包含了WS-COOR 和 WS-AT的实现工具,他们是:
IBM WebSphere offer WS-AT for WAS
Choreology offers a Business Transaction Management (BTM) product called Cohesions
显然,这些实现工具无法帮助你的.NET服务,但是最起码这能够引起我们的注意:虽然还只是处于过渡阶段, 但是已经有供应商开始支持这些标准了。