2016-07-06 123 views
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> 

非常基本的消息隊列服務的綁定並且調用一個函數消息就不會到達該服務。當停止服務時,它們不會進入任何隊列,儘管有時您會看到一個短暫出現在客戶端機器的傳出隊列中。

跟蹤文件表示一切正常,只是它無法查看它是否是事務性的。這是...

我不知道該怎麼嘗試,我會說它應該工作,但它不是。 我還可以嘗試什麼?

回答

2

...有時你看到一個很快出現在 客戶機

這意味着客戶端已成功入隊的消息,該消息被從一臺計算機發送的傳出隊列到另一個(假設這是一個事務隊列 - 它需要按照您在綁定中指定的「完全一致」)。

因此,假設事務性排隊,問題必須在接收端。

首先要檢查的是隊列權限。接收消息,運行該服務的服務帳戶需要以下隊列權限:

  • 接收
  • 皮克
  • 獲取權限
  • 獲取性能

如果這些都是理所當然的,那麼接下來就是enable msmq event logging。您應該能夠看到消息到達機器的事件。之後的任何問題你應該能夠看到使用這個日誌。

+0

只有「消息傳過網絡」,之後什麼也沒有。同一臺機器上的其他隊列有「消息來了......」,然後「消息被放入隊列xx」。我給網絡服務帳戶完全控制隊列,但仍然是同樣的問題 – Laurijssen

+0

在SO上搜索這個問題導致我這樣:http:// stackoverflow。com/questions/6469095/msmq-messages-received-but-not-delivered-windows-2008-r2添加匿名登錄修復它 – Laurijssen

+0

hehe只是指出,那是你的帖子 – Laurijssen

1

檢查您嘗試發送的消息的長度。

WCF默認情況下只發送8192個字符。

如果您想發送超過8192個字符,則需要更改。

我有類似的問題,這對我有用。