WCF ルーティング サービスを使用する予定です。
2 つのキュー (q1、q2) があるとします。ルーティング サービスは q1 からメッセージを取得し、それを要求応答サービスに転送します。ルーティング サービスによって応答が受信されると、再度 q2 に転送されます。
応答を別のキューに転送する方法に行き詰まっていますが、これは WCF RoutingService で可能なユース ケースですか?
よろしくお願いします。
WCF ルーティング サービスを使用する予定です。
2 つのキュー (q1、q2) があるとします。ルーティング サービスは q1 からメッセージを取得し、それを要求応答サービスに転送します。ルーティング サービスによって応答が受信されると、再度 q2 に転送されます。
応答を別のキューに転送する方法に行き詰まっていますが、これは WCF RoutingService で可能なユース ケースですか?
よろしくお願いします。
ルーティング サービスは、メッセージ交換の特定の属性 (アドレス、エンドポイント名、完全なコンテンツ ベースのルーティング用の特定の XPath ステートメントなど) を定義する MessageFilter 定義を使用します。
次の MSDN リンクは、ルーティング サービス メッセージ フィルター定義の包括的な概要を提供します:
http://msdn.microsoft.com/en-us/library/ee517424.aspx
私の理解が正しければ、あなたがやりたいことを達成する方法はありません。
ルーターはメッセージ A を受信し、それを req-reply サービス (サービス B と呼びます) に転送できます。また、サービス B から返された応答を受信し、その応答を非同期メッセージとしてサービス C に転送することもできます。
ただし、ルーターがサービス B からの応答コンテンツに基づいてサービス C にメッセージ A を送信する方法はありません。その時点までに、(メッセージ A ではなく) サービス B からの応答が現在処理されているメッセージになるためです。
正しく理解できましたか?
実際に呼び出される前に操作をインターセプトするために、 IOperationInvokerの調査を開始しました。
対処すべき同様のシナリオがあり、問題をどのように解決したかについての指針をいただければ幸いです。
"RoutingService" をシール クラスにしないことが最善の選択肢です。このようにして、独自のサービスを作成し、必要なコントラクトを実装して、アクションをオーバーライドできます。