这些MS DTC例外意味着什么?

时间:2012-10-30 18:53:01

标签: exception transactionscope msdtc

我编写了一个程序来演示多线程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();
  }
}

1 个答案:

答案 0 :(得分:0)

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

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

是否是一个问题,您通知事务管理员您的交易实际上并非完整?