2008-08-11 16 views
84

これは有効な質問ですか? MSTDCを使用している.NET Windowsアプリケーションがあり、例外をスローしています。SQL ServerでMSDTCを有効にするにはどうすればよいですか?

System.Transactions.TransactionManagerCommunicationException:分散トランザクションマネージャ(MSDTC)のネットワークアクセスが無効になっています。コンポーネントサービス管理ツール---> System.Runtime.InteropServices.COMException(0x8004D024)を使用して、MSDTCのセキュリティ構成で ネットワークアクセスのDTCを有効にしてください:トランザクションマネージャがリモート/ネットワーク トランザクションのサポートを無効にしました。 (HRESULTからの例外:0x8004D024)System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransactionで(UInt32型 propgationTokenSize、バイト[] propgationToken、のIntPtr managedIdentifier、 のGUID & transactionIdentifier、OletxTransactionIsolationLevel & たIsolationLevel、ITransactionShim & transactionShim)....

私はアプリがインストールされているPCでthe Kbalertz guide to enable MSDTCに従っていますが、それでもエラーが発生します。

これはデータベースの問題かどうか疑問に思っていましたか?もしそうなら、私はそれをどのように解決できますか?

+0

上記の解決方法で問題が解決しない場合は、[このリンク](http://stackoverflow.com/questions/10346367/mvc-3-the-msdtc-transactイオンマネージャーはトランザクションからの引き渡しが不可能 –

答えて

3

MSDTCは、サーバーとクライアントの両方のシステムで有効にする必要があります。
また、RPCをブロックするシステム間にファイアウォールがないことを確認してください。
DTCTestは、その他の問題のトラブルシューティングに役立つ良いリットルアプリです。

+0

http://ww2.sqldev.net/?folio=7POYGN0G2 DTCTestが見つかりませんでした。 – Kiquenet

93

MSDTCも必要ですか?発生しているエスカレーションは、通常、単一のTransactionScope内で複数の接続を作成することによって発生します。

必要な場合は、エラーメッセージの概要に従って有効にする必要があります。 XPの場合:[管理ツール]を

  • ゴー - > [コンポーネントサービス
  • 展開コンポーネントサービス - >コンピュータ - >
  • 右クリック - > [プロパティ] - [セキュリティ設定]ボタン
  • ヒット> MSDTCタブ
+2

また、Windowsファイアウォールでは、ポート135 TCPを開いて例外としてc:\ windows \ msdtc.exeを追加しました – Sameer

+18

単一のTransactionScope内で複数の接続を作成することによって発生したエラーに関するコメントをありがとう。私はエラーを受け取り、それはまさに問題でした。私はMSDTCを使いたくなかったので、間違った新しい接続を見つけて、既存のものを再利用しました。ありがとう! –

+10

私は窓7と8にあり、「デフォルトコーディネーター」セクションのみがあります。あなたが話しているセキュリティ設定にはどこで行くことができますか? – qdev76

4

@Dan、

私はのために有効にMSDTCを必要としないでください。 トランザクションは機能しますか?

分散トランザクションのみ - 複数の接続を含むもの。トランザクション内で単一の接続を開いているだけで、エスカレートしないことを二重に確認してください。パフォーマンスも向上します。私はデバッグするための最良の方法は、Microsoftのツールを使用することであることがわかってきました

+0

トランザクションを動作させるためにmsdtcを有効にする必要はありませんか?いずれにせよ、私が知っている限り、複数の接続が行われていません。私はすでにクライアントPC上でこれらのステップを実行していますが、私はデータベースサーバ上でそれらのステップも実行すべきですか? – Dan

+0

@ Dan、ado.netトランザクションを使用している場合は、DTCを有効にする必要はありません。分散トランザクションを使用している場合にのみ、サーバー上でMSDTCを有効にする必要があります。 – Niraj

17

は コピーサーバー(DB)とクライアント(アプリケーションサーバ/クライアントPC)の両方にファイルDTCPing

  1. と呼ばれます
      は、サーバーでは、サーバーとクライアント
    • でそれを起動し
    • :再起動し
    • 両方のアプリケーションをDTCの接続をクライアントのNetBIOSコンピュータ名を記入し、セットアップをしてみてください。クライアントで
    • :私は私たちの古い会社のネットワークに問題の私の運賃契約を持っていた、と私は持っているサーバーのNetBIOSコンピュータ名を記入し、セットアップにDTC接続

を試してみてくださいいくつかのヒント:

  • それは、コンピュータがそのNetBIOS名することにより、他のコンピュータを見つけることができないことを意味し、「GETHOSTBYNAMEに失敗しました」エラーメッセージを取得する場合。例えば、サーバーはクライアントを解決しpingできますが、これはDNSレベルで動作します。 Netbiosルックアップレベルではありません。 WINSサーバーを使用するか、LMHOST(ダーティー)を変更するとこの問題が解決されます。
  • 「アクセスが拒否されました」というエラーが表示された場合、セキュリティ設定が一致しません。 msdtcのセキュリティタブを比較し、サーバーとクライアントを一致させる必要があります。見るべきもう一つのことはRestrictRemoteClientsの値です。お使いのOSのバージョン、さらに重要なService Packによって、この値は異なる場合があります。
  • その他の接続の問題:
    • (サーバとクライアントの間にファイアウォールがポート135を介した通信を許可する必要がありますそして、もっと重要なのは、接続が両方のサイトから開始することができ、私はファイアウォールの人々と多くの問題がありました私の会社はサーバだけがそのポートへの接続を開くと仮定しているため)
    • プロトコルは、実際のトランザクション通信のために接続するためにランダムなポートを返します。ファイアウォールの人々はそれを好まず、ポートを特定の範囲に制限したいと考えています。 How to configure RPC dynamic port allocation to work with firewallsで説明されているように、キーを使用してRPCダイナミックポートの生成を特定の範囲に制限できます。私の経験で

DTCPingがDTC接続クライアントから開始し、サーバーから開始セットアップすることができる場合、あなたの取引は、もはや問題ではありません。

4

また、コントロールパネルのservices.mscからMSDTCを有効にする方法については、hereを参照してください。

トリガーが存在するサーバーで、MSDTC サービスを有効にする必要があります。これを行うには、[スタート]> [設定]> [コントロールパネル]> [管理ツール]> [サービス]をクリックします。 「Distributed Transaction Coordinator」と呼ばれるサービスを探し、右クリック( を選択)>開始をクリックします。

90

使用このWindows Server 2008 R2およびWindows Server 2012 R2

  1. クリックし、を起動 DCOMCNFG 実行、タイプをクリックし、コンポーネントサービスを開くには、OKクリック。コンソールツリーで

  2. コンポーネントサービスをクリックして展開し、コンピュータをクリックして展開し、マイコンピュータをクリックして展開し、分散トランザクションコーディネーターを展開しローカルDTC]をクリックします。

  3. ローカルDTCをクリックして、ローカルDTCプロパティ]ダイアログボックスを表示しプロパティをクリックしてください。

  4. セキュリティタブをクリックします。

  5. チェックマーク"ネットワークDTCアクセス"チェックボックス。

  6. 最後にマークをチェックチェックボックス "アウトバウンドを許可" "インバウンド許可"。

  7. クリックOKを入力してください。

  8. サービスを再開するメッセージが表示されますサービス。

  9. クリックOKとそれだけです。

参考:https://msdn.microsoft.com/en-us/library/dd327979.aspx

注:時々、ローカルコンピュータまたはサーバー上のネットワークファイアウォールが接続を中断する可能性がありますので、「許可「着信を許可」にルールを作成することを確認してくださいアウトバウンド "接続c:\windows\msdtc.exe

+0

Windows Server 2012 R2でも動作します。明確な指示をありがとう。私自身でこれを見つけたことはありませんでしたか? – jonazu

+0

@ jonazu今、私はWindows Server 2012 R2の答えも更新しました:) –

+0

良い仕事ShivSingh! –

関連する問題