2 つのリモート SQL 接続時にトランザクションスコープが機能しない

StackOverflow https://stackoverflow.com/questions/944372

質問

C# コンソール アプリケーション プロジェクトで 2 つの SQL Server 接続オブジェクトを使用しています。これを単一トランザクションで行う必要があるため、Transactionscope(分散トランザクション)を使用しました

トランザクションスコープ内の接続を使用できません。エラーが表示されます。

サーバー上の MSDTC が利用できません。

どうすれば解決できますか...1つのSQL接続は両方ともリモートサーバーであり、別のSQL接続はローカルサーバーです。

注:- msdtc サービスはすでに開始されています。

サーバーは両方のマシンで起動しました。それでも私は問題に直面しています。ローカル イントラネット マシンのファイアウォールをオフにする必要がありますか?

役に立ちましたか?

解決

分散トランザクションを実行するときは常に、ローカル マシンおよびトランザクションに参加するすべてのサーバー上で Microsoft 分散トランザクション コーディネーターが実行されている必要があります。ファイアウォールを設置している場合は、MSDTC が通信するポートを制限し、接続を許可する適切なルールをファイアウォール構成に追加していることを確認する必要があります。特定のポートだけでなくポートマッパー アクセスも必要だと思います。 RPC 用に選択した範囲。サーバー間で認証がどのように行われるかを制御する、同期する必要がある MSDTC のさまざまなセキュリティ設定もあります。

役立つリンクをいくつか示します。

  1. MSDN の MSDTC
  2. MSDTC のトラブルシューティング
  3. MSDTC とファイアウォールの問題

他のヒント

スタートMSDTCサービスます。

コマンドプロンプトでます:

net start msdtc

やサービスMMCから。 「分散トランザクションコーディネータ」を検索して起動する]をクリックします。

DTC を適切に実行するのが難しい場合 (特にファイアウォールまたは SQL クラスターが関係している場合)、 DTCPing は、それを識別するための優れたツール (Microsoft による) です。(IIRC) 双方向で DTCP できる必要があることに注意してください。

私は最近に働いていたプロジェクトで同じ問題を抱えていました。残念ながら、私は別の答えで説明したようにMSDTCを開始できるようにする権利を持っていませんでした。あなたが同じような状況にある場合、私は、私はしばらく前に、この問題についての投稿質問を読んお勧めします。

MSDTC号

ただ、アイデア、あなたはおそらくすでにこれを試してみました。あなたはMSDTCサービスが実行されていることを確認した場合は、サービスを実行しているコンピュータ上のイベントログを見て持っていましたか?あなたはそこサービスからのエラー情報を見つけることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top