0

「トランザクションはすでに暗黙的または明示的にコミットまたは中止されています。」というメッセージが時々スローされるコードの単体テストがあります。例外。Google はすばらしいヒットをたくさん出してくれますが、私が読んだものはどれも当てはまらないようです。

単体テストをローカルで実行すると、例外がスローされることはありません。
ビルド サーバーで手動で実行すると、例外がスローされることはありません。

実際、例外がスローされるように見えるのは、自動化されたビルドおよびテスト プロセス中の夜間のみであり、約 80% の時間で例外がスローされます。

問題は通常、トランザクションまたはファイアウォールのデータベース接続の問題によって引き起こされるため、これにより、この件に関するほとんどすべての Google の結果が除外されます。

イベント ログ (テストを実行しているビルド マシンまたは開発データベース サーバー) のいずれにも、問題があることを示唆するイベントはありません。実際、関連する唯一のイベント メッセージはデータベース マシン上にあり、「MSDTC: セッション アイドル タイムアウト オーバー、セッションを破棄しています」というメッセージが表示されます。テストを実行した直後にイベントが発生します。

この問題を見つけようとする方法がわかりません。

トランザクション状態のコード内から詳細を生成する方法はありますか (私は .NET 3.5 で C# を使用しています)?

これを追跡するのに役立つ詳細情報をイベント ログから取得する方法はありますか?

関連するマシンは Windows 2000 Server (db) と Windows Serer 2003 (build) で、適切なツールを見つけるのに役立ちます。

4

1 に答える 1

0

エラーをスローしているテストは、おそらくエラーの場所ではありません。

そのテストの前に実行されるテストの 1 つが、トランザクションを開いたままにするか、その他の問題である可能性があります。

次に、実行されるテストが MSDTC に接続すると、エラーが発生します。

それを見つける方法は、失敗したテストだけから始めて、それを単独で実行することです。合格するはずです。次に、失敗するまで、一度に 1 つ (または複数) の他のテストを追加します。

于 2010-10-01T19:38:08.920 に答える