如何调试DTC问题?

时间:2010-10-01 19:06:43

标签: c# .net-3.5 transactions msdtc

我对某些代码进行了单元测试,偶尔会抛出“事务已经被隐式或显式提交或中止”。例外。谷歌给了我很多精彩的点击,但我读过的都没有,似乎适用。

如果我在本地运行单元测试,则永远不会抛出异常 如果我在构建服务器上手动运行它,则永远不会抛出异常。

事实上,异常似乎被抛出的唯一时间是在自动构建和测试过程中的夜晚,其中大约80%的时间抛出异常。

这几乎排除了有关该主题的所有Google结果,因为问题通常是由交易或防火墙中的数据库连接问题引起的。

任何事件日志(在运行测试的构建计算机或开发数据库服务器上)都没有事件表明存在问题。事实上,我看到的唯一相关事件消息是在数据库机器上 - “MSDTC:会话空闲超时超时,拆除会话”。在我进行测试后不久就会发生事件。

我不确定如何继续尝试找到此问题。

有没有办法从代码中生成事务状态的详细信息(我使用的是C#with .NET 3.5)?

有没有办法让事件日志为我提供更多信息来帮助跟踪此事?

如果这有助于找到合适的工具,那么所涉及的机器是Windows 2000 Server(db)和Windows Serer 2003(build)。

1 个答案:

答案 0 :(得分:0)

抛出错误的测试可能不是错误所在。

在测试之前运行的测试可能会导致事务处于打开状态或其他问题。

然后,当它运行的测试在接触MSDTC时会出错。

找到它的方法是从仅失败的测试开始,单独运行,它应该通过。然后一次添加一个(或几个)其他测试,直到它失败。