Question

J'ai un service Windows qui capte les messages de divers MSMQs. Le service reprend les messages des files d'attente, et exécute ensuite un flux de travail spécifique basé sur la file d'attente le message est venu de. Est-il possible de configurer un service WCF pour accepter un message à partir d'un point de terminaison et placez-le dans une file d'attente? Je voudrais que le service d'avoir plusieurs points d'extrémité, et en fonction du point de terminaison reçu le message, le message placé dans une autre file d'attente. J'ai vu des choses sur NetMsmqBinding mais jusqu'à présent, je ne l'ai pas été en mesure de déterminer si cela est destiné à l'usage que je pense à.

Toute aide est appréciée,

Mike

Était-ce utile?

La solution 2

La façon dont j'ai pu aller à ce sujet était en créant une classe ServiceHost personnalisée que je pouvais passer un nom de configuration. Ceci est une alternative à l'implémentation par défaut qui utilise le service nom du type de mise en œuvre pour localiser la configuration. Cela m'a permis d'exécuter plusieurs instances de la même mise en œuvre sur la même machine. En plus de cela, à l'intérieur de la MessageInspector classe de service personnalisé J'ai ajouté une coutume qui s'attacher à chaque point final pour écouter les messages. J'utilise ensuite la méthode IDispatchMessageInspector.AfterReceiveRequest () pour prendre le message entrant, puis le placer dans une file d'attente que je définis dans ma configuration. Un peu compliqué, mais il fonctionne parfaitement pour notre scénario.

Autres conseils

Suis-je obtenir correctement cela - vous voulez avoir

  • un service WCF exposée au monde extérieur en utilisant plusieurs points de terminaison
  • en fonction du critère d'évaluation le message entre dans le service WCF, il faut mettre ces messages dans des files d'attente séparées MSMQ?

Vous pouvez certainement avoir un service WCF qui expose un certain nombre de points d'extrémité à l'extérieur et qui chuterait les messages entrants dans une file d'attente MSMQ. Je ne suis pas sûr que vous serez en mesure dans la méthode de service WCF de savoir quel point final la demande est arrivée sur ..... En général, la classe de service WCF ne sait rien sur l'endroit où la demande est venue de (et généralement n'a pas besoin de savoir ...).

Je vois quelques approches à ceci:

  • disposer de plusieurs services, un pour chaque (type de) point d'extrémité; ils peuvent partager tout leur code et tout, mais si vous vous séparez cela en cours de service distincts, chaque classe de service serait par nature savoir ce qu'il sert point final, et pourrait ainsi savoir quelle file d'attente MSMQ pour mettre l'information en

  • trouver un moyen d'envoyer des informations d'en-tête ainsi que le message qui vous indique en quelque sorte où placer les messages

  • dans WCF 4.0, vous pourriez être en mesure de faire quelque chose avec le nouveau service de routage WCF .... pas tout à fait sûr de savoir comment cela fonctionnerait, mais - car il faudrait aussi une sorte de « soupçon » de savoir qui EndPoint il a été appelé et comment acheminer le message entrant

fixations net.msmq permettre à un client de WCF d'écrire directement à une file d'attente MSMQ, même si le service WCF file d'attente de lecture ne sont pas en direct - il n'a même pas exister. fixations net.msmq permet également la lecture automagique des files d'attente. Aucune utilisation de MessageQueue pour écrire ou lire à partir, une file d'attente.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top