Question

J'ai un service WCF qui utilise la communication MSMQ, lorsque j'exécute le service sur mon NetWrok local, je configure les points de terminaison du service dans les fichiers de configuration du client pour pointer de l'ordinateur hôte, par exemple si le point de terminaison spécifié sur l'hôte de service est:

<endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

Je configure mon client pour envoyer des messages à ce point de terminaison:

<endpoint address="net.msmq://192.168.1.5/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

Évidemment, 192.168.1.5 est la propriété intellectuelle de l'ordinateur hôte, cela fonctionne comme un charme. J'héberge mon service dans IIS 7, j'active l'écouteur MSMQ sur IIS, donne un accès approprié, etc.À peu près tout dans l'article de Tom Hollanders) Et je peux même accéder à mon service via HTTP dans mon navigateur, mais lorsque je crée des clients de mon service qui sont hébergés dans IIS et configurez les points de terminaison du client App.config, Naturellement, je configure mes clients à ce sujet:

<endpoint address="net.msmq://ServiceHostPublicIP/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
        <identity>
            <dns value="localhost" />
        </identity>
</endpoint>

C'est là que les choses tournent mal. Les messages que j'envoie continuent de faire la queue dans une file d'attente sortante sur la machine client: DIRECT=OS:[ServiceHostPublicIP]\private$\MsmqService\MyMsmqServiceEt l'état de la file d'attente est toujours: «attendant de se connecter». J'ai essayé de définir le protocole de transfert de file d'attente sur SRMP, mon nom de file d'attente est le même que mon nom de service que celui qui est requis par IIS, et j'ai donné des autorisations appropriées sur la file d'attente. Quelqu'un a-t-il récemment rencontré ce problème? Des idées? Ce serait formidable si quelqu'un pouvait partager un échantillon de travail de MSMQ sur HTTP s'il en avait un.

Toute aide serait grandement appréciée. Merci d'avance.

Était-ce utile?

La solution

J'ai réussi à résoudre ce problème, mes messages étaient coincés dans une file d'attente sortante sur la machine client, "Direct = TCP: hosserverip private $ msmqservice / mymsmqService.svc" L'état de la file d'attente était "attendait de se connecter" et le suivant Hop était les serveurs de destination publiques IP, afin que le client ne puisse pas se connecter à la file d'attente de destination même si elle pouvait cingler les serveurs de destination IP public, il s'est avéré le port 1801 qui est utilisé par MSMQ pour écouter le trafic entrant n'était pas ouvert sur le routeur du réseau sur lequel résidait la machine hôte de service, après Port d'ouverture 1801 Tout fonctionne comme un charme. C'est une question tellement fondamentale que je suppose que beaucoup n'ont pas pris la peine de le mentionner dans leurs articles / tutoriels. J'espère que cela aide quelqu'un plus tard.

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