2010-05-18 95 views
0

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

由于通信问题,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上是否存在MSDTC问题 - 64位版本?

回答

1

事实证明,我在SQL Server Service Broker的Receive调用中打开了一个数据库连接,然后试图建立到我的数据访问层的新连接。这是造成这个问题的原因,修复后的结果是在打开第二个连接之前关闭第一个连接。

+0

开放式SQL连接也对我造成这个问题。 – TroyC 2012-01-03 06:01:45