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 に答える