Message Queue服务消息无法到达

时间:2016-07-06 12:29:17

标签: c# wcf netmsmqbinding

我通过消息排队得到了这个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>   

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

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

跟踪文件说一切正常,除了它无法查看是否是事务性的。它是......

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

2 个答案:

答案 0 :(得分:2)

  

...有时你会看到一个很快出现在传出队列中   客户端机器

这意味着客户端成功将消息入队并且消息正在从一台计算机传输到另一台计算机(假设这是一个事务性队列 - 它需要在绑定中指定“exactOnce”)

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

要检查的第一件事是队列权限。要接收消息,运行该服务的服务帐户需要以下队列权限:

  • 接收
  • 皮克
  • 获取权限
  • 获取属性

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

答案 1 :(得分:1)

检查您要发送的邮件的长度。

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

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

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