2014-10-09 108 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

相关问题