【问题标题】:Message Queue service messages don't arrive消息队列服务消息未到达
【发布时间】:2016-07-06 12:29:16
【问题描述】:

我已经通过消息队列获得了这个 WCF 服务。

服务配置如下:

  <service name="EmailServices.EmailService" behaviorConfiguration="serviceBehaviour">
    <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration="" name="mexEmailService" contract="IMetadataExchange" />
    <endpoint name="netMsmqEmailService" address="net.msmq://w2k8services/emailservices_w2k8services" contract="EmailServices.IEmailService"
            binding="netMsmqBinding" bindingConfiguration="netMsmq" />
    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8008/EmailService" />
      </baseAddresses>
    </host>
  </service>

这样的绑定

  <netMsmqBinding>
    <binding name="netMsmq" exactlyOnce="true" receiveErrorHandling="Move" receiveTimeout="00:45:00" maxReceivedMessageSize="2147483647">
      <security mode="None" />
    </binding>   

相当基本的消息队列服务,在本地运行良好

在生成代理并调用函数后,消息不会到达服务。停止服务时,它们不会进入任何队列,尽管有时您会看到一个很快出现在客户端机器的传出队列中

跟踪文件显示一切正常,除了它无法查看是否是事务性的。这是……

我不知道该尝试什么了,我会说它应该可以工作,但事实并非如此。 我还能尝试什么?

【问题讨论】:

    标签: c# wcf netmsmqbinding


    【解决方案1】:

    ...有时您会看到一个很快出现在 客户端机器

    这意味着客户端成功地将消息排入队列并且消息正在从一台机器传输到另一台机器(假设这是一个事务队列 - 它需要像您在绑定中指定的“exactlyOnce”一样) .

    因此,假设事务排队,问题一定出在接收方。

    首先要检查的是队列权限。要接收消息,运行服务的服务帐户需要以下队列权限:

    • 接收
    • 偷看
    • 获取权限
    • 获取属性

    如果这些都被授予,那么接下来就是enable msmq event logging。您应该能够在机器上看到消息到达的事件。之后的任何问题,您都应该能够使用此日志查看。

    【讨论】:

    • 只有“消息来自网络”,然后什么都没有。同一台机器上的其他队列有“消息来了..”,然后是“消息被放入队列 xx”。我让网络服务帐户完全控制了队列,但仍然是同样的问题
    • 在 SO 上搜索此问题导致我发现:stackoverflow.com/questions/6469095/… 添加匿名登录已修复
    • 呵呵刚刚注意到那也是你的帖子
    【解决方案2】:

    检查您尝试发送的消息的长度。

    WCF 默认只发送 8192 个字符。

    如果要发送超过 8192 个字符,则需要进行更改。

    我遇到了类似的问题,这对我有用。

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2010-11-02
      相关资源
      最近更新 更多