2014-10-09 167 views
0

我在我們的項目中添加了一個新的工作人員角色來處理撥打電話。它吸引呼叫以取消服務巴士隊列。
我做了一個小小的控制檯應用程序,將事情放到隊列中,以便我可以檢查以確保它正常工作。不幸的是,似乎無論什麼被我的應用程序放入隊列中,都立即(或幾乎是即刻)放到死信隊列中。我看了一下隊列的屬性,我可以看到未收到來自Azure服務總線隊列的郵件

MessageCount 5 
ActiveMessageCount 0 
DeadLetterMessageCount 5 
TransferMessageCount 0 
AvailabilityStatus Available 
EnableDeadLetteringOnMessageExpiration False 

工作者角色試圖從隊列中取出東西,但它的所有內容都是空值。
隊列設置與我們正在工作的其他隊列相同。我要放入隊列的對象幾乎都是由所有基元組成的,標記爲[MessageContract]和[Serializable]。所有成員都標記爲[MessageHeader]。
我也嘗試過使用我們用於其他隊列的對象來查看會發生什麼,以及那一個也是死的。

我不明白。隨着隊列大小的增長,該對象顯然會進入隊列。但它只是立即死信,我不知道什麼可能會導致除了事情超時發生。

更多信息:使用服務總線瀏覽器進行了一次查看,並且由於MaxDeliveryCountExceeded,消息看起來似乎是死信。這似乎意味着,如果收到一條消息失敗超過10次,它會將其轉移到死信隊列中。所以部分解決了,但我在工作角色代碼中加入了一個調試點,並且在那裏沒有任何錯誤發生。我的

BrokeredMessage message = Client.Receive() 

總是返回null,所以甚至沒有時間讓它做任何錯誤。我想在實際的Receive()調用中出現錯誤?

+0

你能提供更多的代碼嗎?請說明您如何創建客戶端(發件人和接收者)以及如何將消息推送到隊列中。 – 2014-10-10 03:31:21

回答

1

原來,在MessageContract中擁有一個Uri足以讓它在反序列化過程的某個地方失敗。所以Client.Receive();試圖得到它10次,總是失敗,然後它崩潰了。 我認爲Uris是可序列化的,但是通過服務總線似乎存在問題。無論如何,在我的情況下,把Uri改成絃樂並不是什麼大事,現在一切都好了。

+0

很高興我看到了這一點。非常感謝您回覆並回復您自己的帖子。我自己也有同樣的問題,並且很難調試。對我而言,這是間歇性的,根本沒有任何幫助。 – 2015-07-06 12:04:35

相關問題