MSMQ通过HTTP调用未到达目标队列

时间:2012-02-28 18:58:59

标签: wcf iis-7 msmq netmsmqbinding

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

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

我将客户端配置为向此端点发送消息:

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

显然192.168.1.5是主机的IP,这就像一个魅力。我在IIS 7中托管我的服务,在IIS上激活MSMQ监听器,提供适当的访问权限等(Pretty much everything in Tom Hollanders article),我甚至可以在浏览器中通过http访问我的服务,但是当我创建我的服务的客户端时在IIS中托管并在客户端App.config中配置端点,我自然会将客户端配置为:

<endpoint address="net.msmq://ServiceHostPublicIP/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的工作样本,那就太棒了。

非常感谢任何帮助。提前谢谢。

1 个答案:

答案 0 :(得分:4)

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