質問

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

どんな助けも感謝しています、

マイク

役に立ちましたか?

解決 2

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

他のヒント

私はこれを正しく取得していますか - あなたは持ちたいです

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

任意の数のエンドポイントを外部に公開するWCFサービスを間違いなく持つことができます。 WCFサービス方法内で、リクエストがどのエンドポイントになったかを知ることができるかどうかはわかりません.....通常、WCFサービスクラスは、リクエストがどこから来たのかについて何も知りません(そして通常、知る必要はありません...)。

私はこれへのいくつかのアプローチを見ます:

  • エンドポイントごとに1つずつ複数のサービスを提供します。彼らはすべてのコードとすべてを共有できますが、これを別々のサービスクラスに分離すると、各サービスクラスは本質的に 知る どのエンドポイントが提供するか、したがって、MSMQがどのような情報を配置するかを知ることができました

  • ヘッダー情報を送信する方法を見つけて、メッセージをどこに配置するかを教えてくれるメッセージと一緒に

  • WCF 4.0では、新しいWCFルーティングサービスで何かをすることができるかもしれません。しかし、それがどのように機能するかはわかりません。そして、着信メッセージをルーティングする方法

net.msmqバインディングにより、WCFクライアントは、キュー読み取りWCFサービスがライブでなくても、MSMQキューに直接書き込むことができます。存在する必要さえありません。 net.msmqバインディングは、キューからの自動的な読み取りも可能にします。キューに書き込み、または読み取るためのメッセージqueueの使用はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top