wcf - MSMQ llama por HTTP sin llegar a la cola de destino
iis-7 netmsmqbinding (1)
Tengo un servicio WCF que usa comunicación MSMQ, cuando ejecuto el servicio en mi netwrok local, configuro los puntos finales del servicio en los archivos de configuración del cliente para apuntar a la computadora host, por ejemplo, si el punto final especificado en el host del servicio es:
<endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService"
binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Configuro mi cliente para enviar mensajes a este punto final:
<endpoint address="net.msmq://192.168.1.5/private/MsmqService/MyMsmqService"
binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Obviamente 192.168.1.5 es la IP de la computadora host, esto funciona como un encanto. Alojo mi servicio en IIS 7, activo el oyente MSMQ en IIS, proporciono el acceso adecuado, etc. ( casi todo en el artículo de Tom Hollanders ) e incluso puedo acceder a mi servicio a través de http en mi navegador, pero cuando creo clientes de mi servicio alojado en IIS y configure los puntos finales en el cliente App.config
, naturalmente configuro mis clientes para esto:
<endpoint address="net.msmq://ServiceHostPublicIP/private/MsmqService/MyMsmqService"
binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
Ahí es donde las cosas van mal. Los mensajes que envío siguen en cola en una cola saliente en la máquina cliente: DIRECT=OS:[ServiceHostPublicIP]/private$/MsmqService/MyMsmqService
y el estado de la cola siempre es: ''Waiting to Connect''. Intenté configurar el protocolo de transferencia de cola en SRMP
, mi nombre de cola es el mismo que el nombre de servicio que IIS requiere, y he otorgado los permisos correspondientes en la cola. ¿Alguien ha encontrado recientemente este problema antes? ¿Algunas ideas? Sería genial si alguien pudiera compartir una muestra de trabajo de MSMQ sobre HTTP si tuviera una.
Cualquier ayuda sería muy apreciada. Gracias por adelantado.
Logré solucionar esto, mis mensajes se quedaron atascados en una cola saliente en la máquina del cliente, "DIRECT = TCP: HOSTSERVERIP / private $ / MsmqService / MyMsmqService.svc" el estado de la cola era ''Waiting to connect'' y el siguiente hop era la IP pública de los servidores de destino, por lo que el cliente no podía conectarse a la cola de destino aunque podía hacer ping a la IP pública de los servidores de destino, resultó que el puerto 1801 que MSMQ usa para escuchar el tráfico entrante no estaba abierto en el enrutador de la red en la que residía la máquina host del servicio, después de abrir el puerto 1801, todo funciona como un amuleto. Es un tema tan fundamental que supongo que muchos no se molestaron en mencionarlo en sus artículos / tutoriales. Espero que esto ayude a alguien más adelante.