这些 MS DTC 异常是什么意思?

3
我写了一个程序来演示多线程下 DTC 超时的行为。我遇到了几个异常,看起来是随机发生的。这些异常都是简单的超时吗?还是有一些深层次的问题(例如连接池交互)迹象呢?

Microsoft 分布式事务协调器 (MS DTC) 已取消分布式事务。

分布式事务已完成。请将此会话在新事务或 NULL 事务中注册。

当前连接关联的事务已完成但未被处理。必须在使用该连接执行 SQL 语句之前处理该事务。

操作对于事务的状态无效。

ExecuteReader 需要一个打开且可用的连接。连接的当前状态为关闭。

这是代码中的数据部分:
using (DemoDataDataContext dc1 = new DemoDataDataContext(Conn1))
using (DemoDataDataContext dc2 = new DemoDataDataContext(Conn2))
{
  WriteMany(dc1, 100);  //generate 100 records for insert
  WriteMany(dc2, 100000);  //generate 100,000 records for insert

  Console.WriteLine("{0} : {1}", Name, " generated records for insert.");
  using (TransactionScope ts = new TransactionScope())
  {
    dc1.SubmitChanges();
    dc2.SubmitChanges();
    ts.Complete();
  }
}

听起来你正在泄漏连接(打开但从未关闭“某些东西”)。这绝对是“不好的” ;) 但我不确定你应该做什么来修复它 :( - paulsm4
Conn1和Conn2是字符串。WriteMany通过InsertOnSubmit添加记录...这些记录与任何内容都没有关联。有足够的数据,我预计会出现超时。异常确实在超时的预期时间发生。 - Amy B
这种数据上下文创建和事务范围使用的模式是我在这里询问的:http://stackoverflow.com/questions/11693811/am-i-using-transactionscope-and-datacontext-properly - Amy B
1个回答

0
所有这些异常都告诉我你有内存泄漏。对我来说,这些异常不仅仅是一些简单的超时,我认为你应该寻找更深层次的问题。 ts.Complete()不能保证事务的提交。它只是一种通知事务管理器你的状态的方式。http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx 如果你通知事务管理器你的事务已经完成,但实际上并没有完成,这会成为一个问题吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接