これに関する MSDN、フォーラム、および記事を読むのに何日も費やしましたが、問題の解決策が見つかりません。
PoC として、コンシューマ側でフォールト トレランスが必要なため、複数のマシンからキューを消費する必要があります。1 日に交換されるメッセージは 100 未満であるため、パフォーマンスは問題になりません。
1 つはクライアントとして、もう 1 つはサーバーとして、2 つの単純なコンソール アプリケーションをコーディングしました。Framework 4.0 を使用 (3.5 でもテスト済み)。メッセージはトランザクションを使用しています。
複数のコンシューマ アプリケーション インスタンスを実行している場合でも、すべてが 1 台のマシン (Windows 7) で正常に実行されます。
現在、2012 および 2008 R2 の仮想テスト サーバーを同じドメインで実行しています (ただし、AD 統合は使用したくありません)。IP アドレスまたは「.」を使用しています。DNS / AD 解決の副作用を防ぐためのエンドポイント アドレス属性。
キューがコンシューマーによってホストされ、プロデューサーがリモート プライベート キューにメッセージを送信している場合、すべてが正常に機能します。これは、2012 サーバーと 2008 サーバーのコンシューマー/プロデューサーの役割を交換した場合にも当てはまります。
しかし、コンシューマーがリモート キューから読み取り、プロデューサーがメッセージ localy を送信しているときに、WCF を使用してこの実行を行うことはできませんでした。送信が失敗することはありません。私の問題は消費者側にあります。
netMsmqBinding を使用してこれを実行したいのですが、msmqIntegrationBinding も使用してみました。テストごとにコードと構成を調整し、コンシューマーがローカル キューから消費しているときにこれが正常に実行されることを確認しました。
私が行った最後のテストは、WCF (msmqIntegrationBinding) をプロデューサー (ローカル キュー) でのみ使用し、System.Messaging.MessageQueue をコンシューマー (リモート キュー) で使用することです: 正常に動作します! => 私の目標は、両側で WCF と netMsmqBinding を使用して同じものを作成することです。
私の見解では、この問題が MSMQ の問題ではなく、WCF の問題であることを証明しました。これは、セキュリティ、認証、ファイアウォール、トランスポート、プロトコル、MSMQ バージョンなどとは関係ありません。
MS Service Trace Viewer を使用したエラー情報:
メッセージの受信時に msmqIntegrationBinding を使用する (openning キューは問題ありません) :キューからメッセージを受信中にエラーが発生しました: 指定されたトランザクションをインポートできません。(-1072824242、0xc00e004e)。MSMQ がインストールされ、実行されていることを確認します。キューが受信できることを確認してください。
キューを開く際に netMsmqBinding を使用: '172.22.1.9\private$\Test' キュー パス名を形式名に変換するときにエラーが発生しました: 指定されたキュー パス名が無効です。(-1072824300、0xc00e0014)。キューに入れられたチャネルに対するすべての操作が失敗しました。キュー アドレスが有効であることを確認してください。MSMQ は、Active Directory 統合を有効にしてインストールする必要があり、アクセスできる必要があります。
私の構成がメッセージングよりもはるかにエレガントで構成可能な方法であるWCFで処理できない理由を誰かが見つけるのを手伝ってくれるなら、私は大いに感謝します!
Thank you.