2

我已经通过消息队列获得了这个 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>   

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

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

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

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

4

2 回答 2

2

...有时您会看到一个很快出现在客户端计算机的传出队列中

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

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

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

  • 收到
  • 窥视
  • 获取权限
  • 获取属性

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

于 2016-07-06T16:15:40.847 回答
1

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

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

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

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

于 2016-07-06T17:05:21.827 回答