1

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

这是我的代码。

DbTransaction trans = Connection.BeginTransaction();

//Code

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

1 回答 1

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

于 2010-08-06T05:38:59.070 回答