Question

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 ne fonctionne pas, les messages reçus sont mis en attente jusqu'à ce que le service démarre.

Mon problème est que le service ne démarre pas lorsqu'un message touche la file d'attente. Le service est hébergé dans IIS, et il est donc pas instancié jusqu'à ce que IIS reçoit une demande. Si je passe en revue au service il traite les messages dans la file d'attente, mais évidemment ce n'est pas ma méthode désirée de traitement de la file d'attente!

Je pense que je dois changer la mise en œuvre du service, ou modifier la configuration IIS, mais je ne sais pas où ou quoi changer.

UPDATE

Quelqu'un utilise-t réellement MSMQ sur WCF? J'ai eu ce travail pour un court laps de temps - je permis à la liaison sur une différent site sur le même serveur, bizarrement -. Mais maintenant il est en quelque sorte cessé de travailler à nouveau

Le seul problème que je rencontre 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 exemple, Lorsque je navigue sur le fichier .svc. J'ai le protocole net.msmq activé sur l'application, et je la net.msmq liaison activée sur le site ... est autre chose que je dois faire?

Était-ce utile?

La solution

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 liaison net.msmq.

Vérifier ce blogpost ou ce screencast devrait vous donner tous les détails.

Autres conseils

Cela peut sauver quelqu'un les heures il m'a fallu: http://msdn.microsoft.com/en-us/library/ms731053. aspx

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

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 même meilleure suggestion est d'exécuter MSMQ comme un service géré / service Windows ou une application autonome plutôt que sous IIS.

L'une des options est d'accueillir ce que service Windows. Étant donné que IIS ne déclenche pas automatiquement le WAS lorsqu'un message est placé sur une file d'attente.
Une autre option est de créer un service simple de Windows qui cingle ce service après intervalle de temps spécifié. Nous avons exposé un autre contrat sur le même service, sans IsOneWay = true (puisque cette opération ne sera pas interagir avec les files d'attente). Ensuite, créé un service Windows qui cingle l'URL du service WCF après un certain intervalle de temps, ce qui assure le processus WAS est toujours actif et WCF capte les messages dès qu'il ya un message sur la file d'attente.
De plus, assurez-vous que le service est également hébergé sur http et net.msmq les deux.

Je suis tombé sur un article agréable pour un guide étape par étape pour la mise en œuvre WCF avec MSMQ en utilisant la liaison Net.Msmq:
MSMQ avec WCF en utilisant la liaison Net.Msmq

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