セットアップ
Windows Server 2012R2 で実行されている IIS/AppFabric でホストされている WCF サービスがあります。サービスは、netMsmqBinding を介してローカルのトランザクション MSMQ キューにバインドされます。私の操作は、TransactionScopeRequired = true で装飾されています。サービス操作は、BizTalk サーバーから呼び出しを受け取り、それらを処理し、netMsmqBinding を介して (同じ BizTalk サーバー上の) リモート キューに応答を返します。
<endpoint name="Outbound" address="net.msmq://int01test.mydomain.com/private/queue.name" binding="netMsmqBinding" bindingConfiguration="QueueBindingConfigurationOutbound" contract="My.Outbound.Contract" /> <netMsmqBinding> <binding name="QueueBindingConfigurationOutbound"> <security> <transport msmqAuthenticationMode="WindowsDomain" msmqProtectionLevel="Sign" /> </security> </binding> </netMsmqBinding>
テスト環境では、これは意図したとおりに機能します。
テスト環境での物理的なセットアップ: サーバー int01test.mydomain.com は、BizTalk サーバーと受信キューをホストします。これは、サービス アカウント mydomain\inttestuser で実行されます。サーバー app01test.mydomain.com は、アプリケーション (IIS/AppFabric)、データベース (SQL サーバー)、および送信キューをホストします。これは、サービス アカウント mydomain\apptestuser で実行されます。
問題
このソリューションが受け入れテスト環境に昇格すると、呼び出しは引き続き処理されますが、応答はエラー メッセージでブロックされます。
System.ServiceModel.EndpointNotFoundException: キューを開いているときにエラーが発生しました: 認識できないエラー -1072824317 (0xc00e0003)。メッセージをキューから送受信できません。MSMQ がインストールされ、実行されていることを確認します。また、必要なアクセス・モードと許可でキューを開くことができることも確認してください。---> System.ServiceModel.MsmqException: キューを開いているときにエラーが発生しました: 認識できないエラー -1072824317 (0xc00e0003)。メッセージをキューから送受信できません。MSMQ がインストールされ、実行されていることを確認します。また、必要なアクセス・モードと許可でキューを開くことができることも確認してください。
違い
テスト環境では、サービスとデータベースが単一のサーバー インスタンスで実行されています。(ただし、BizTalk Server とそのキュー (送信メッセージのターゲット) は別のサーバーにあります) 受け入れテスト環境では、私のソリューションは負荷分散された 2 つのサーバーに展開され、データベースは別のクラスターに配置されます。運用環境を模倣するための、より厳格な外部ファイアウォール ルールもあります。BizTalk サーバーでさえクラスター化されていますが、現在はクラスター間ではなくマシン間で通信しています。
QA 環境でのセットアップは次のとおりです。 サーバー int01qa.mydomain.com (int02qa.mydomain.com でクラスター化) は、BizTalk サーバーと受信キューをホストします。これは、サービス アカウント mydomain\intqauser で実行されます。サーバー app01qa.mydomain.com (app02qa.mydomain.com でクラスター化) は、アプリケーション (IIS/AppFabric) と送信キューをホストします。これは、サービス アカウント mydomain\appqauser で実行されます。サーバー db01qa.mydomain.com が私のデータベースをホストしています。
すでに試したこと
- リモート キューでの認証を無効にしました。
- 私のサービスが実行されているアカウントと「全員」に完全な制御を許可しました。
- 2 つのサーバー間で msmq メッセージを手動で送信することに成功しました。
- 応答をローカルのプライベート キューに送信するようにサービスを構成しましたが、同じエラーが発生しました。