web-dev-qa-db-ja.com

通信の問題により、MSDTCトランザクションマネージャーはソーストランザクションマネージャーからトランザクションをプルできませんでした

サーバー1でWebappをホストし、サーバー2でデータベースをホストしています

しかし、私は次のエラーが出ます

"基になるトランザクションマネージャーとの通信に失敗しました。"

グーグル検索して、DTC(Distributed Transaction)の問題であることを指摘する投稿を見つけました。server2(DBサーバー)でDTCを有効にし、ファイアウォールで例外を作成しました。

enter image description here

enter image description here

しかし、それでも同じエラーです。

ここに完全なスタックトレースがあります

メッセージ:System.Transactions.TransactionManagerCommunicationException:基になるトランザクションマネージャーとの通信に失敗しました。 ---> System.Runtime.InteropServices.COMException:通信の問題により、MSDTCトランザクションマネージャーはソーストランザクションマネージャーからトランザクションをプルできませんでした。考えられる原因は次のとおりです。ファイアウォールが存在し、MSDTCプロセスの例外がない、2台のマシンがNetBIOS名でお互いを検出できない、または2つのトランザクションマネージャのいずれかでネットワークトランザクションのサポートが有効になっていない。 (HRESULTからの例外:0x8004D02B)System.Transactions.Oletx.IDtcProxyShimFactory.ReceiveTransaction(UInt32 propgationTokenSize、Byte [] propgationToken、IntPtr managedIdentifier、Guid&transactionIdentifier、OletxTransactionITransationActionTransmactionTransmactionTransactionSimactionTransactionSimactionTransactionSimactionTransactionSimactionTransactionSimactionTransactionSimactionTransactionSimactionTransactionSymaction伝搬トークン)

親切にアドバイス

12
MARKAND Bhatt

私たちはまったく同じ状況にありました。毎回、次のいずれかでした。

  1. サーバーのDNSのIPアドレスが古くなっています(エラーメッセージで述べられているように、 "2台のマシンはNetBIOS名でお互いを見つけることができません")。これが当てはまるかどうかを確認するには、ping servernameコマンドプロンプトで、あるサーバーから別のサーバーへ。名前によるpingが失敗し、IPによるpingが成功した場合(または名前によるpingが誤ったIPを返す場合)、システム管理者に相談してDNS/DHCPを確認する必要があります。

  2. サーバーは、事前構成されたサーバーのイメージとして作成されます(たとえば、仮想マシンを使用していて、サーバーごとに新規インストールを実行する代わりに、イメージを複製するだけです)。 DTCには内部「識別子」があるため、これは問題です。イメージのクローン作成の場合、両方のインストール済み環境が同じDTC IDを持ち、相互に通信できなくなります。解決策は、単にDTCをアンインストールして再度インストールすることです。

それが役に立てば幸い。

17
veljkoz

リモートSQlサーバーに接続しているときにも同じ問題が発生しました。私の場合の解決策は、"enlist=false"を接続文字列に追加することでした。

2
LpiAlreadyTaken

確認すること:

  • 両方のサーバーでこの構成を行いましたか?
  • 両方のサーバーが同じドメインのメンバーですか?
  • イベントログを確認しましたか?
1
Shiraz Bhaiji

リモートIP \マシン名をサーバー上のファイルに追加した後に解決:hosts、フォルダーC:\ Windows\System32\drivers\etcのlmhosts

0
Артем