Wcf HTTP上的MSMQ调用未到达目标队列

Wcf HTTP上的MSMQ调用未到达目标队列,wcf,iis-7,msmq,netmsmqbinding,Wcf,Iis 7,Msmq,Netmsmqbinding,我有一个使用MSMQ通信的WCF服务,当我在本地netwrok上运行该服务时,我在客户端配置文件中配置服务终结点以指向主机,例如,如果服务主机上指定的终结点是: <endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService" binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmq

我有一个使用MSMQ通信的WCF服务,当我在本地netwrok上运行该服务时,我在客户端配置文件中配置服务终结点以指向主机,例如,如果服务主机上指定的终结点是:

<endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
这就是问题所在。我发送的消息一直在客户端计算机上的传出队列中排队:
DIRECT=OS:[ServiceHostPublicIP]\private$\MsmqService\MyMsmqService
队列的状态始终为:“等待连接”。我已尝试将队列传输协议设置为
SRMP
,我的队列名称与IIS要求的服务名称相同,并且我已对队列授予适当的权限。最近有人遇到过这个问题吗?有什么想法吗?如果有人能够通过HTTP共享MSMQ的工作示例(如果有的话),那就太好了


任何帮助都将不胜感激。提前感谢。

我设法解决了这个问题,我的邮件被卡在客户端计算机上的传出队列中,“DIRECT=TCP:HOSTSERVERIP\private$\MsmqService/MyMsmqService.svc”队列的状态是“等待连接”,下一个跃点是目标服务器的公共IP,因此,客户机无法连接到目标队列,即使它可以ping目标服务器公共IP,但MSMQ用于侦听传入流量的端口1801在服务主机所在网络的路由器上未打开,打开端口1801后一切都像魔咒一样工作。这是一个非常基本的问题,我想很多人在他们的文章/教程中都没有提到它。希望这对以后的人有所帮助。

我设法解决了这个问题,我的消息被卡在客户端计算机上的传出队列中,“DIRECT=TCP:HOSTSERVERIP\private$\MsmqService/MyMsmqService.svc”队列的状态为“等待连接”,下一跳是目标服务器的公共IP,因此,客户机无法连接到目标队列,即使它可以ping目标服务器公共IP,但MSMQ用于侦听传入流量的端口1801在服务主机所在网络的路由器上未打开,打开端口1801后一切都像魔咒一样工作。这是一个非常基本的问题,我想很多人在他们的文章/教程中都没有提到它。希望这对以后的人有所帮助。

你能回答吗?这是如何回答这个问题的?使用MSMQ over HTTP,您只需要打开端口80,而不需要打开任何其他端口(这就是重点!!)传出队列表明WCF客户端没有尝试通过HTTP发送消息(否则您将获得HTTP前缀而不是OS前缀)!我记得当我这么做的时候,我从家里的计算机调用服务,服务托管在我们办公室的服务器上,消息没有到达主机服务器上的队列,在MSDN论坛的某个地方,有人建议打开主机网络上的端口1801,因此,我将传入的流量转发到端口1801到主机,它工作了……您所说的很有意义,这就是为什么我甚至没有费心打开该端口,但这是当时我的解决方案。老实说,我不能告诉你为什么它会起作用,但它确实起作用了。你能回答吗?这是如何回答这个问题的?使用MSMQ over HTTP,您只需要打开端口80,而不需要打开任何其他端口(这就是重点!!)传出队列表明WCF客户端没有尝试通过HTTP发送消息(否则您将获得HTTP前缀而不是OS前缀)!我记得当我这么做的时候,我从家里的计算机调用服务,服务托管在我们办公室的服务器上,消息没有到达主机服务器上的队列,在MSDN论坛的某个地方,有人建议打开主机网络上的端口1801,因此,我将传入的流量转发到端口1801到主机,它工作了……您所说的很有意义,这就是为什么我甚至没有费心打开该端口,但这是当时我的解决方案。老实说,我不能告诉你为什么它会起作用,但它确实起了作用。
<endpoint address="net.msmq://192.168.1.5/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>
<endpoint address="net.msmq://ServiceHostPublicIP/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
        <identity>
            <dns value="localhost" />
        </identity>
</endpoint>