2009-09-09 5 views
7

J'ai un service WCF avec netMsmqBinding. Mon client peut envoyer des messages à ma file d'attente et lorsque le service est en cours d'exécution, il récupère les messages de la file d'attente comme prévu. Si le service n'est pas en cours d'exécution, les messages reçus sont mis en file d'attente jusqu'à ce que le service démarre.Liaison MSF de WCF avec un service IIS - comment instancier le service?

Mon problème est que le service ne démarre pas lorsqu'un message arrive dans la file d'attente. Le service est hébergé dans IIS et n'est donc pas instancié tant que IIS n'a pas reçu de demande. Si je navigue vers le service alors il traite les messages dans la file d'attente, mais évidemment ce n'est pas ma méthode désirée de traiter la file d'attente!

Je m'attends à devoir modifier l'implémentation du service ou modifier la configuration d'IIS, mais je ne sais pas où et quoi changer.

MISE À JOUR

Quelqu'un utilise-t réellement MSMQ sur WCF? J'ai eu ce travail pendant une courte période - j'ai activé la liaison sur un site Web différent sur le même serveur, bizarrement - mais maintenant il a en quelque sorte cessé de fonctionner à nouveau.

Le seul problème que j'ai est avec l'activation du service quand il y a un message dans la file d'attente. Actuellement, la file d'attente ne traite que lorsque le service est instancié, par ex. quand je parcours le fichier .svc. J'ai le protocole net.msmq activé sur l'application, et j'ai la liaison net.msmq activée sur le site ... y at-il autre chose que je dois faire?

Répondre

5

Vous devez explicitement configurer IIS pour l'activation non HTTP. Je ne connais pas tous les détails du haut de ma tête mais, fondamentalement, vous devez utiliser appcmd pour configurer et activer l'activation de la liaison net.msmq.

Vérifiez this blogpost ou this screencast devrait vous donner tous les détails.

2

Je crois que mes problèmes à l'aide MSMQ sur la liaison WCF étaient principalement autour de IIS.

Je n'avais pas fin de problèmes à l'aide de Windows XP/Server 2003 avec IIS 6.

Utilisation de Windows 7 ou Server 2008 avec IIS 7.5 tout fonctionne bien.

Une suggestion encore meilleure est d'exécuter MSMQ en tant que service géré/service Windows ou une application autonome plutôt que sous IIS.

0

Une option consiste à l'héberger en tant que service Windows. Depuis IIS n'active pas automatiquement le WAS lorsqu'un message est placé dans une file d'attente.
Une autre option consiste à créer un service Windows simple qui pings ce service après l'intervalle de temps spécifié. Nous avons exposé un autre contrat sur le même service, sans IsOneWay = true (puisque cette opération n'interagira pas avec les files d'attente). Puis créé un service Windows qui envoie un ping à l'URL du service WCF après un intervalle de temps spécifié, ce qui garantit que le processus WAS est toujours actif et que WCF récupère les messages dès qu'il y a un message dans la file d'attente.

Assurez-vous également que le service est également hébergé sur http & net.msmq.

Je suis tombé sur un bon article pour un guide étape par étape pour implémenter WCF avec MSMQ en utilisant Net.Liaison Msmq:
Setup MSMQ with WCF using Net.Msmq binding

Questions connexes