WCF 通过 MSMQ 绑定(bind)。如何检测邮件何时移至毒物队列?

标签 wcf msmq msmqbinding

我正在运行一个通过 MsmqBinding 调用 WCF 服务的 WCF 客户端。
框架为 .Net 4.0,客户端和服务器运行在 Windows Server 2008 R2 上。
channel 队列是事务性的。

该服务使用以下绑定(bind)参数托管: receiveErrorHandling="Move" receiveRetryCount="3" retryCycleDelay="00:00:20" maxRetryCycles="5"
鉴于 ((ReceiveRetryCount+1) * (MaxRetryCycles + 1)) 有效,这将导致
4*6 = 在将任何给定消息移动到毒子队列之前重试 24 次。

将 IErrorHandler 附加到我的服务中,我注意到在 wcf 子系统最终将消息移动到 ;poison 子队列之前,使用 MsmqPoisonMessageException 总共调用了 HandleError 6 次(对于有毒消息)。

我想记录重试消息完成并将消息移动到毒队列的确切时间。在我看来,唯一的选择是计算某个消息错误的次数,并将此计数与绑定(bind)的 MaxRetryCycles 进行比较。这是尴尬且容易出错的。

我的问题是:

  • 有什么办法让我
    最终检测到事件
    wcf 子系统移动消息
    去毒队列?

  • 我的引用资料是:
    http://msdn.microsoft.com/en-us/library/aa395218.aspx

    和:http://consultingblogs.emc.com/simonevans/archive/2007/09/17/A-comprehensive-guide-to-using-MsmqIntegrationBinding-with-MSMQ-3.0-in-WCF.aspx

    最佳答案

    重试次数当然是您的参数的结果;但是,在您的 IErrorHandler 中,您可以自己显式地将消息移动到毒物队列中。否则,它将始终根据您的绑定(bind)参数移动,并且会像任何其他队列一样通过监听毒队列来检测。

    关于WCF 通过 MSMQ 绑定(bind)。如何检测邮件何时移至毒物队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5431331/

    相关文章:

    WCF:如何诊断故障 channel ?

    wcf - SOAP、JSON 和 POX 在同一个安静的 wcf 中

    msmq - Rebus 和远程队列

    wcf - 在 Azure PaaS 上配置 MTU 大小

    c# - 如何使用 Visual Studio - 生成异步 WCF 调用?

    c# - 如何以编程方式检查 NServiceBus 是否已完成所有消息的处理

    MSMQ - 多个订阅者和事件通知

    wcf - 将 NInject 与 WCF 服务一起使用时使用 MSMQ 绑定(bind)在 WAS 中托管时替代 HttpContext

    WCF MSMQ 单元测试