我们有一个.Net应用程序,它使用NHibernate启动一个事务并修改数据库X中的数据。在这个事务中,我们发出了对WebService(.Net)的调用,它也修改了数据库X并可能修改了其他数据库。 / p>
有没有办法在两个应用程序之间共享此事务,而无需为Web服务编写资源管理器? (这是我看到的唯一方式)
启动事务的应用程序如何知道(和控制)WebService启动的数据库事务?
答案 0 :(得分:1)
如果您使用的是WCF,则相当简单。您所要做的就是将TransactionFlowAttribute
放在合约上的方法中,以便让交易流过它。
然后,您将在数据库调用周围创建一个TransactionScope
实例,并调用客户端上的Web服务,并且将在您对数据库的调用之间协调事务。网络服务。
IIRC,您需要运行Distributed Transaction Controller服务才能协调事务。
如果你不使用WCF,那么是的,你必须创建一个资源管理器。最好的方法是,可能有一个特定于您尝试在特定事务中管理的两个资源的资源管理器,并使用compensating transactions提交/回滚,具体取决于响应的状态参与交易的个人资源。