【问题标题】:No MSDTC - Still getting "communication with underlying transaction manager failed"没有 MSDTC - 仍然得到“与底层事务管理器的通信失败”
【发布时间】:2010-08-06 04:40:10
【问题描述】:

在我的项目中,我使用 Ado.Net 的 DbTransaction 对象来管理事务...那么为什么我会收到与 MSDTC 相关的错误 - “与底层事务管理器的通信失败”。

这是我的代码。

DbTransaction trans = Connection.BeginTransaction();

//Code

if (successfull)
{
    trans.Commit();
}
else
{
    trans.RollBack();
}

【问题讨论】:

  • 你真的需要 msdtc 吗?您在一个事务中与多少个数据库服务器进行交互?

标签: .net sql-server ado.net transactions msdtc


【解决方案1】:

不幸的是,MSDTC 的设置确实很麻烦。然而,一旦你开始使用它,它就会很好地工作。问题只是因为每个人的网络设置略有不同。

听起来您的 MSDTC 服务可能未在您的客户端计算机或服务器上启用。

这是在 Windows 7 上启用它的指南:--> http://www.thereforesystems.com/turn-on-msdtc-windows-7/

您还需要在您的数据库服务器上启用它:--> http://support.microsoft.com/kb/817064

无需联系服务器管理员即可测试其是否有效的一种简单方法是在您的开发盒上设置两个不同的本地数据库。然后尝试跨两个数据库连接维护事务。假设你正确配置了 msdtc,一切都应该正常。

最后一点是,您可以通过引用 System.Transactions 库并像这样使用您的事务代码来让您的生活更轻松一些:

using (TransactionScope scope = new TransactionScope())
{
    /* Perform transactional work here */
    SomeMethod();
    scope.Complete();
}

请注意,不需要显式回滚。如果在 using 语句中发生任何崩溃,或者如果您在点击 .Complete(); 之前退出 using 语句,您的事务将回滚。有关 TransactionScope 的更多信息,请参见此处:--> http://msdn.microsoft.com/en-us/library/ms172152(VS.90).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多