【问题标题】:MSMQ calls over HTTP not reaching destination queue通过 HTTP 的 MSMQ 调用未到达目标队列
【发布时间】:2012-03-18 06:47:39
【问题描述】:

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

<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 的工作示例(如果他们有的话),那就太好了。

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

【问题讨论】:

    标签: wcf iis-7 msmq netmsmqbinding


    【解决方案1】:

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

    【讨论】:

    • 这如何回答这个问题?使用基于 HTTP 的 MSMQ,您只需要打开端口 80 而不需要打开任何其他端口(这就是重点!!)传出队列表明 WCF 客户端未尝试通过 HTTP 发送消息(否则您将获得 HTTP前缀而不是操作系统前缀)!
    • 嗯,我记得当我这样做的时候,我从家里的计算机调用服务,服务托管在我们办公室的服务器上,消息没有到达主机上的队列服务器和 MSDN 论坛上的某个地方有人建议在主机网络上打开端口 1801,所以我将传入流量转发到端口 1801 到主机计算机并且它工作......你说的有道理,这就是为什么我什至没有打扰打开那个端口,但这是当时我的解决方案。老实说,我无法告诉你为什么它有效,但它确实有效。
    猜你喜欢
    • 2013-10-25
    • 2012-05-22
    • 2017-04-27
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2018-02-02
    相关资源
    最近更新 更多