没有MSDTC - 仍然“与基础事务管理器的通信失败”

时间:2010-08-06 04:40:11

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

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

这是我的代码。

DbTransaction trans = Connection.BeginTransaction();

//Code

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

1 个答案:

答案 0 :(得分: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