サーバー1でWebappをホストし、サーバー2でデータベースをホストしています
しかし、私は次のエラーが出ます
"基になるトランザクションマネージャーとの通信に失敗しました。"
グーグル検索して、DTC(Distributed Transaction)の問題であることを指摘する投稿を見つけました。server2(DBサーバー)でDTCを有効にし、ファイアウォールで例外を作成しました。
しかし、それでも同じエラーです。
ここに完全なスタックトレースがあります
メッセージ: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伝搬トークン)
親切にアドバイス
私たちはまったく同じ状況にありました。毎回、次のいずれかでした。
サーバーのDNSのIPアドレスが古くなっています(エラーメッセージで述べられているように、 "2台のマシンはNetBIOS名でお互いを見つけることができません")。これが当てはまるかどうかを確認するには、ping servername
コマンドプロンプトで、あるサーバーから別のサーバーへ。名前によるpingが失敗し、IPによるpingが成功した場合(または名前によるpingが誤ったIPを返す場合)、システム管理者に相談してDNS/DHCPを確認する必要があります。
サーバーは、事前構成されたサーバーのイメージとして作成されます(たとえば、仮想マシンを使用していて、サーバーごとに新規インストールを実行する代わりに、イメージを複製するだけです)。 DTCには内部「識別子」があるため、これは問題です。イメージのクローン作成の場合、両方のインストール済み環境が同じDTC IDを持ち、相互に通信できなくなります。解決策は、単にDTCをアンインストールして再度インストールすることです。
それが役に立てば幸い。
リモートSQlサーバーに接続しているときにも同じ問題が発生しました。私の場合の解決策は、"enlist=false"
を接続文字列に追加することでした。
確認すること:
リモートIP \マシン名をサーバー上のファイルに追加した後に解決:hosts、フォルダーC:\ Windows\System32\drivers\etcのlmhosts