1

さまざまなMSMQからメッセージを取得するWindowsサービスがあります。このサービスは、キューからメッセージを取得し、メッセージの送信元のキューに基づいて特定のワークフローを実行します。エンドポイントからのメッセージを受け入れてキューに入れるようにWCFサービスを構成することは可能ですか?サービスに複数のエンドポイントを持たせたいのですが、メッセージを受信したエンドポイントに応じて、メッセージは別のキューに配置されます。私はnetMsmqBindingについてのことを見てきましたが、これまでのところ、これが私が考えている用途のためのものであるかどうかを判断することはできませんでした。

どんな助けでもありがたいです、

マイク

4

3 に答える 3

1

私はこれを正しく理解していますか?

  • 複数のエンドポイントを使用して外の世界に公開される WCF サービス
  • メッセージが WCF サービスに入るエンドポイントに応じて、それらのメッセージを個別の MSMQ キューに入れる必要がありますか?

任意の数のエンドポイントを外部に公開し、着信メッセージを MSMQ キューにドロップする WCF サービスを確実に作成できます。WCF サービス メソッド内で、リクエストがどのエンドポイントで受信されたかを知ることができるかどうかはわかりません。通常、WCF サービス クラスは、リクエストがどこから来たかについて何も知りません (そして通常、知る必要はありません...)。

これにはいくつかのアプローチがあります。

  • エンドポイント (のタイプ) ごとに 1 つずつ、複数のサービスがあります。彼らはすべてのコードとすべてを共有できますが、これを個別のサービス クラスに分割すると、各サービス クラスは本質的にサービスを提供するエンドポイントを認識し、情報を格納する MSMQ キューを認識できます。

  • メッセージをどこに置くかを何らかの形で知らせるメッセージとともに、いくつかのヘッダー情報を送信する方法を見つける

  • WCF 4.0 では、新しい WCF ルーティング サービスを使用して何かを実行できる可能性があります....どのように機能するかはよくわかりませんが、呼び出されたエンドポイントを知るために何らかの「ヒント」が必要になるためです。受信メッセージをルーティングする方法

于 2010-12-21T21:53:37.200 に答える
0

これを行う方法は、構成名を渡すことができるカスタム ServiceHost クラスを作成することでした。これは、サービス実装タイプ名を使用して構成を検索するデフォルトの実装に代わるものです。これにより、同じマシンで同じ実装の複数のインスタンスを実行できました。それに加えて、カスタム サービス クラス内に、メッセージをリッスンするためにすべてのエンドポイントにアタッチするカスタム MessageInspector を追加しました。次に、IDispatchMessageInspector.AfterReceiveRequest() メソッドを使用して受信メッセージを取得し、構成内で定義したキューに配置します。少し複雑ですが、このシナリオでは完璧に機能します。

于 2010-12-29T20:27:38.287 に答える
0

net.msmq バインドにより、WCF クライアントは、キューを読み取る WCF サービスが稼働していなくても、MSMQ キューに直接書き込むことができます。存在する必要さえありません。net.msmq バインドでは、キューからの自動読み取りも可能です。キューへの書き込みまたはキューからの読み取りに MessageQueue を使用しない。

于 2011-02-28T20:03:50.353 に答える