使用WCF和NHibernate 3(也是5)的分布式事务使未完成事务保持不变

时间:2018-10-10 10:11:38

标签: .net wcf nhibernate transactionscope mstdc

问题流

  • 客户致电服务A
  • 服务A启动事务并执行数据库查询和更新。
  • 服务A使用wcf(net.tcp,transactionFlow =“ true” transactionProtocol =“ OleTransactions”)调用服务B
  • 服务B [OperationBehavior(TransactionScopeRequired = true,TransactionAutoComplete = true)]执行数据库查询和更新,并返回到A。此处,Hibernate 3由于环境事务而拒绝关闭连接。 < / li>
  • 服务A进行更多更新并提交分布式事务。

在SQL Server中,可以验证用于服务B中最后一条SQL语句的事务仍处于打开状态。

当尝试关闭服务B中的连接时,hibernate抛出异常,拒绝在涉及事务时关闭该连接。

交易最终似乎在超时时结束了。

NHibernate如何打算关闭连接? MSTDC如何通知服务B完成?

我的感觉是,在使用环境事务(TransactionScope + MSTDC)时,数据访问层不应该意识到这一点,并且其行为应类似于没有事务的情况。

编辑:升级到NHibernate 5.1.3,相同的行为仍然存在。仍不支持Agressive版本。

0 个答案:

没有答案