未从Azure Service Bus队列接收邮件

时间:2014-10-09 22:27:09

标签: c# azure azure-servicebus-queues

我在我们的项目中添加了一个新的工作人员角色来处理拨打电话。它引出了调用服务总线队列的呼叫 我做了一个小的控制台应用程序把东西放到队列中,以便我可以检查以确保它正常工作。不幸的是,似乎我的应用程序放入队列的任何内容立即(或几乎立即?)放入死信队列。我看了一下队列的属性,我可以看到

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

工作者角色尝试从队列中取出东西,但是所有它都是空的 队列设置与我们正在工作的其他队列相同。我正在放入队列的对象由几乎所有基元组成,标记为[MessageContract]和[Serializable]。所有成员都标有[MessageHeader] 我也尝试使用我们用于其他队列的对象,只是为了看看会发生什么,以及那个也是一个死信。

我不明白。随着队列规模的增长,该对象显然已成为队列。但它只是立即死信,我不知道除了事情超时之外还会发生什么原因。

更多信息:使用Service Bus Explorer看一下,由于MaxDeliveryCountExceeded,似乎消息已经过时。这似乎意味着如果接收消息失败超过10次,它将把它转移到死信队列。所以这些部分已经解决了,但我在工作者角色代码中放了一个调试点,并且从来没有发生过任何错误。我

BrokeredMessage message = Client.Receive()

总是返回null,所以甚至没有任何时间它做错了什么。我想在实际的Receive()调用中出了什么问题?

1 个答案:

答案 0 :(得分:1)

事实证明,在MessageContract中使用Uri足以让它在反序列化过程中的某个地方失败。所以Client.Receive();试图得到它10次,总是失败,然后它变得无法控制。 我认为Uris是Serializable,但是将它们放入服务总线似乎存在问题。无论如何,在我的情况下,将Uri改成字符串并不是什么大不了的事情现在一切都很好。