3

ここで非常に奇妙なことが起こっています。

デバッグしていたレガシー コードの周りにトランザクション スコープを追加して、行っていたいじりがコミットされないようにしました。

これは2回機能し、次のように述べています。

"The transaction manager has disabled its support for remote/network transactions."

動作/非動作間でコードの変更や再構築を行う必要はありません (文字通り 3 つの F5 が連続して [Web アプリ])。これは、削除 DB サーバーに接続するローカル コードでした。

このため、別のプロジェクトの完全に別のコードがタイムアウトになります。このコードから transactionScopes を削除すると正常に動作しますが、それらを配置するとタイムアウトします。ローカルの SQL サーバーとリモートの SQL サーバーを試しましたが、どちらも transactionScope 内でタイムアウトしました。

一体何が起こっているのですか?

編集:TransactionScopesを次から変更することがわかりました:

using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))

using (var scope = new TransactionScope())

問題を防ぎます:s

これは何を意味するのでしょうか?

4

3 に答える 3

3

の違い:

using (var scope = new TransactionScope(TransactionScopeOption.RequiresNew))

using (var scope = new TransactionScope())

2番目のトランザクションは既存の(アンビエント)トランザクションを再利用しますが、最初のトランザクションは古いトランザクション内に新しいトランザクションを作成します。

トランザクション内のこのトランザクションには、分散トランザクションコーディネーターが必要です。

エラーには、次の3つの理由が考えられます。

  • MSDTCが実行されていません
  • データベースが別のマシン上にあり、Windowsがネットワークからのトランザクションを許可しないように構成されています。
  • データベースが別のマシン上にあり、SQLサーバーがネットワークからのトランザクションを許可しないように構成されている
于 2009-09-03T14:37:13.277 に答える
0

エラーが発生したときに起こっていることは、フレームワークが元の「軽量」(つまりDBMS)トランザクションを「分散」トランザクションにプロモートしようとしていることだと思います。分散トランザクションを管理するMSDTC(Distributed Transaction Coordinator)サービスが実行されていないか、そうでなければ機能しません。

これは通常、1つの論理トランザクションが2つ(またはそれ以上)のデータベース接続にまたがる場合に発生します。もちろん、あなたの場合、(明らかに)DBMS接続は1つだけです。新しい独立したトランザクションスコープを強制することで、フレームワークにも分散トランザクションを使用するように強制していると思います。

于 2009-04-27T12:18:05.083 に答える