WCF MSDTC事务已提升,但未执行

问题描述

| 我不是WCF和MSDTC的专家,所以希望这很简单。我有一个客户端服务器,一个Web服务服务器和一个数据库。我希望能够将对包装到Web服务服务器的调用包装在TransactionScope中,以便如果操作中出现故障,我可以退出。当所有3个组件都位于我的本地计算机上时,此设置可以正常工作。当我将它们移到单独的服务器上时,一切正常,直到调用在TransactionScope之内。 我可以在dcomcnfg->组件服务->计算机->我的电脑->分布式事务处理协调器->本地DTC下看到在客户端和Web服务服务器上都添加了事务。我看到相同的事务显示在两台计算机上。问题是,它只是等待超时而失败。如果我查看我的事务日志中应该进行的Web服务调用是在TransactionScope内进行的,则它们不存在。 我想念什么?     

解决方法

我不建议跨WCF服务边界使用TransactionScope,但是如果您必须阅读以下内容: http://www.stevefenton.co.uk/Content/Blog/Date/200911/Blog/TransactionScope-and-WCF-Services/     ,我最近在用MSDTC配置NServiceBus和NHibernate时看到了类似的症状。 我的问题的解决方案涉及检查所使用的身份验证。 在分布式事务处理协调器的本地DTC中,转到属性并检查“安全性”选项卡。可能是您需要启用网络DTC访问或更改所使用的身份验证。尝试不进行身份验证以查看是否可行,然后根据需要进行锁定。     ,在这种情况下,它最终成为防火墙问题。我推迟了它是防火墙问题的想法,因为我看到事务出现在服务服务器事务列表中,但是将分布式事务处理协调器添加到防火墙中域通信的允许列表中解决了该问题。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...