0

System.Transactions.TransactionScope()単体テストで使用 して、レコードを挿入し、読み取りを試み、トランザクション スコープをロールバックさせて、データベースに足跡を残さないようにしています。

1  var rep = new RunRepository();
2  using (var scop = new TransactionScope())
3  {
4     var runId = rep.SaveSwrsRun([Run data elements]); // returns PK RunId
5     var run = rep.FetchSwrsRun(runId);  // returns an object of type Run
6     Assert.IsNotNull(run);
7  }

行 5 で例外がスローされ、エラー メッセージが表示されます

System.Transactions.TransactionManagerCommunicationException : 分散トランザクション マネージャー (MSDTC) のネットワーク アクセスが無効になっています。コンポーネント サービス管理ツールを使用して、MSDTC のセキュリティ構成でネットワーク アクセスに対して DTC を有効にしてください。

コンポーネント サービス管理ツールを確認したところ、ワークステーションでDTC が有効になっていますまた、このMSDTC トランザクション スコープの問題スレッドを発見しました。このスレッドから、ネットワーク DTC アクセスを有効にする方法に誘導さ​​れます。

しかし、SQLサーバーをチェックしたとき、リモートアクセスのチェックボックスはすでにチェックされていました. 他に何かアイデアはありますか?

詳細...リポジトリが同じ接続を保持するように強制し、2番目のSQLステートメントの別のプールに戻らないようにすると、機能します。どうやら、2番目のSQLステートメントに別の接続を使用すると、DTCがトランザクションを「分散モード」にエスカレートするようになります(両方のSQLステートメントが同じサーバー上にあり、まったく同じ接続文字列を使用するため、そうすべきではありません)。たとえそれがあったとしても、それ(分散モード)はとにかく動作するはずです。

4

1 に答える 1

0

DTC サービスが実行されている場合は、[セキュリティ構成] をクリックし、[セキュリティ設定] 領域で [ネットワーク DTC アクセス] をオンにします。以下の画像を参照してください。 ネットワーク DTC アクセス

于 2012-08-02T01:28:51.960 に答える