3

1 台のマシンで問題が発生し、次のエラー メッセージが表示されます。

「サーバー XXX の MSDTC は利用できません。」

このコードは、TransactionScopeを使用して LingToSql データベース コードをラップしています。トランザクション内には未加工の Ado.net もあります。

1 つの SQL データベース (2005 年) しかアクセスされていないのに、なぜ分散トランザクションが使用されているのでしょうか?

(コードは現在のセットアップでサーバー上で動作する必要があるため、MSDTC を有効にする方法を知りたくありません)

4

1 に答える 1

7

これは、トランザクションが複数のデータベース接続を使用する場合にほぼ常に発生します。たとえば、2 つのテーブルを更新しているとします。1 つの接続を使用して最初のテーブルを更新し、別の 2 番目の接続を使用して 2 番目のテーブルを更新する場合があります。これにより、TransactionScope オブジェクトを使用していても、トランザクションが MSDTC にエスカレートされます。

これを回避する方法は、トランザクションを実行するときに、すべての書き込みに単一のデータベース コンテキスト オブジェクトを使用することです。これにより、エスカレーションが解消されました。これを行って以来、MSDTC メッセージが表示されることはありません。

ランディ

于 2010-04-27T14:20:17.113 に答える