0

我有一个 Visual Studio 2010 Windows 窗体应用程序,我在其中使用 TransactionScope 类启动事务。然后我从 Sql Server Broker Services 消息队列接收消息,它工作正常。接下来,我尝试通过调用我的数据访问层(即 Visual Studio 数据集(xsd 文件))从同一数据库调用存储过程。当我对数据库进行第二次调用时,我收到以下错误消息:

由于通信问题,MSDTC 事务管理器无法从源事务管理器中提取事务。可能的原因是:存在防火墙并且它对 MSDTC 进程没有异常,两台机器无法通过它们的 NetBIOS 名称找到彼此,或者两个事务管理器之一未启用对网络事务的支持。(来自 HRESULT 的异常:0x8004D02B)。

我在网上看到了几篇关于通过 dcomcnfg.exe 启用 DTC 访问以及允许 DTC 通过 Windows 防火墙进行通信的帖子。我已经做了这些事情,但仍然遇到这个问题。我知道我们的远程数据库服务器设置为启用 DTC 访问,因为我们在 Windows XP 和 Vista 上使用 Visual Studio 2008 构建的其他项目中使用了类似的事务。我认为 Windows 7 和 Visual Studio 2010 有一些特定的东西导致了这个问题,但一直无法找出它是什么。任何人都可以帮助解决这个问题吗?

我刚刚在网上看到另一位遇到此问题的程序员的帖子(http://www.pcreview.co.uk/forums/thread-3977150.php),他说它在 Windows 7 - x86 上运行良好,但得到了这个Windows 7 - x64 上的错误。我正在运行 Windows 7 的 x64 版本,有人知道 Windows 7 - 64 位版本上的 MSDTC 是否存在问题?

4

1 回答 1

1

事实证明,我在对 SQL Server 服务代理的 Receive 调用中打开了一个数据库连接,然后尝试与我的数据访问层建立新连接。这是导致问题的原因,修复结果是在打开第二个连接之前关闭第一个连接。

于 2010-05-18T14:27:51.990 回答