C# 为什么将消息放入死信队列(MSMQ)?

C# 为什么将消息放入死信队列(MSMQ)?,c#,wcf,msmq,dead-letter,C#,Wcf,Msmq,Dead Letter,序言: 我有一个web应用程序,它不时发送MSMQ消息(UseDeadLetterQueue=true)。我还可以看到,其中一些消息被放入系统死信队列中。但是,我无法直接从“计算机管理”控制台看到故障原因。 我找到了以下资源: , 允许检查消息状态和故障。但它仅在WCF范围内可用(因为它使用OperationContext) 基本上,我需要检查消息状态和失败原因,但如何配置WCF服务来侦听死信队列并跟踪放入其中的所有消息,而不考虑发件人? 或者,是否有其他(非WCF)方法来获取特定消息被

序言:
我有一个web应用程序,它不时发送MSMQ消息(UseDeadLetterQueue=true)。我还可以看到,其中一些消息被放入系统死信队列中。但是,我无法直接从“计算机管理”控制台看到故障原因。
我找到了以下资源:
,
允许检查消息状态和故障。但它仅在WCF范围内可用(因为它使用OperationContext)


基本上,我需要检查消息状态和失败原因,但如何配置WCF服务来侦听死信队列并跟踪放入其中的所有消息,而不考虑发件人?


或者,是否有其他(非WCF)方法来获取特定消息被放入死信队列的原因?

您找到的链接文章告诉您如何创建一个WCF服务,将消息从DLQ中删除。请注意,它告诉您必须使用AddressFilterMode=AddressFilterMode.Any来删除所有邮件,而不管发件人是谁

注意:当消息在DLQ上结束时,您将无法了解发生此情况的原因。无论您是否使用WCF,该信息都不会存储在队列中

例如,如果您的收件人是使用MSMQ绑定的WCF侦听器,则引发的任何异常都将导致消息无法传递。MSMQ将重试一段时间,然后最终放弃并将消息放入DLQ。因此,如果您想知道最初的原因,您需要在WCF服务中添加一些跟踪来捕获和跟踪抛出的异常