1

私のプロジェクトでは、Ado.Net の DbTransaction オブジェクトを使用してトランザクションを管理しています...次に、MSDTC 関連のエラーが発生する理由 - 「基になるトランザクション マネージャーとの通信に失敗しました」。

これが私のコードです。

DbTransaction trans = Connection.BeginTransaction();

//Code

if (successfull)
{
    trans.Commit();
}
else
{
    trans.RollBack();
}
4

1 に答える 1

1

残念ながら、MSDTC は実際に設定するのが難しい場合があります。ただし、一度実行すると、美しく機能します。問題が発生するのは、すべてのネットワーク設定がほんの少し異なるためです。

クライアント マシンまたはサーバーで MSDTC サービスが有効になっていない可能性があります。

Windows 7 で有効にするためのガイドは次のとおりです。 --> http://www.thereforesystems.com/turn-on-msdtc-windows-7/

DB サーバーでも有効にする必要があります: --> http://support.microsoft.com/kb/817064

サーバー管理者に連絡せずに動作するかどうかをテストする簡単な方法は、開発ボックスに 2 つの異なるローカル データベースをセットアップすることです。次に、両方のデータベース接続でトランザクションを維持しようとします。msdtc を正しく構成したと仮定すると、すべて正常に動作するはずです。

最後のポイントは、System.Transactions ライブラリを参照し、次のようなトランザクション コードを使用することで、作業を少し楽にすることができるということです。

using (TransactionScope scope = new TransactionScope())
{
    /* Perform transactional work here */
    SomeMethod();
    scope.Complete();
}

明示的なロールバックは必要ないことに注意してください。using ステートメント内で何かがクラッシュした場合、または .Complete(); を押す前に using ステートメントを終了した場合、トランザクションはロールバックします。TransactionScope の詳細については、次を参照してください。 --> http://msdn.microsoft.com/en-us/library/ms172152(VS.90).aspx

于 2010-08-06T05:38:59.070 に答える