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();
  }
}
4

1 回答 1

0

所有这些异常都告诉我你有内存泄漏。对我来说,这些异常不仅仅是一些简单的超时,我认为你应该寻找更深层次的问题。

ts.Complete()不保证事务的提交。这只是将您的状态告知交易经理的一种方式。http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.complete.aspx

您通知事务管理器您的事务已完成而实际上并未完成,这是否是一个问题?

于 2012-11-08T16:58:56.190 回答