テーブルのクエリと更新を行うストアド プロシージャを呼び出す BizTalk ソリューションがあります。負荷分散されたサーバーでソリューションをテストするたびに、このエラーが発生しているようです。
アダプターは、URL "mssql://server//StoredProc?" の送信ポート SQLAdapter_Sendport へのメッセージの送信に失敗しました。この送信ポートに指定された再試行間隔の後に再送信されます。
詳細: System.Transactions.TransactionManagerCommunicationException: 基になるトランザクション マネージャーとの通信に失敗しました。
System.Runtime.InteropServices.COMException: 通信の問題により、MSDTC トランザクション マネージャーはトランザクションを送信先のトランザクション マネージャーにプッシュできませんでした。考えられる原因は次のとおりです。ファイアウォールが存在し、MSDTC プロセスの例外がない、2 台のマシンが NetBIOS 名で互いを検出できない、またはネットワーク トランザクションのサポートが 2 つのトランザクション マネージャーのいずれかで有効になっていない。
HRESULT からの例外:
System.Transactions.Oletx.ITransactionShim.Export(UInt32 whereaboutsSize, Byte[] whereabouts, Int32& cookieIndex, UInt32& cookieSize, CoTaskMemHandle& cookieBuffer)
で System.Transactions.TransactionInterop.GetExportCookie(Transaction transaction, Byte[] whereabouts) からの例外: 0x8004D02A) )
--- 内部例外スタック トレースの終了 ---
以下のように DTC プロパティを設定する必要があるという記事をいくつか読みました。これらは、BizTalk と SQL Server の両方で既に設定しています。
また、Windows ファイアウォールに DTC を追加する必要があります。
最後に、Send Port プロパティの useAmbientTransaction が True に設定されている場合、上記のエラーが引き続き発生します。
しかし、useAmbientTransaction を False に設定すると、メッセージは SQL で成功します。
特にストアド プロシージャに Update と Delete が含まれている場合、Microsoft は useAmbientTransaction を False に設定することを推奨していないという記事を読んだことがあります。しかし、私のソリューションでは、ストアド プロシージャで削除と更新を使用しているため、useAmbientTransaction を True に設定する必要があります。しかし、そうすると、「MSDTC トランザクション マネージャーはトランザクションを宛先にプッシュできませんでした...」というエラーが引き続き発生します。
これに対する可能な解決策を提案してください。