消息队列服务消息未到达

本文关键字:消息 服务 队列 | 更新日期: 2023-09-27 17:55:11

我有这个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>   

非常基本的消息队列服务,在本地工作正常

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

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

我不知道该尝试什么了,我会说它应该有效,但它就是没有。我还能尝试什么?

消息队列服务消息未到达

。有时您会看到一个很快出现在 客户端计算机

这意味着客户端正在成功排队消息,并且消息正在从一台计算机传输到另一台计算机(假设这是一个事务队列 - 它需要与您在绑定中指定的"exactlyOnce"一样)。

因此,假设事务排队,问题必须出在接收端。

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

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

如果这些都已授予,那么接下来就是启用 msmq 事件日志记录。您应该能够看到消息到达计算机上的事件。之后的任何问题,您应该能够使用此日志看到。

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

默认情况下,WCF 仅发送 8192 个字符。

如果要

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

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