none
MSMQ自定义死信队列问题? RRS feed

  • 问题

  • 在学习WCF的队列时,看到了死信的这个问题,书上说但消息在超时、事物不匹配、网络问题等情况下,会将消息放入死信队列中,而MSMQ4.0版本可以自定义死信队列,我的环境为 Windows 7 32bit,客户端配置如下,我配置了死信队列为自定义的,队列名称为 localhost/private/deadlog。

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.serviceModel>
        <bindings>
          <netMsmqBinding>
            <binding name="NetMsmqBinding_ILog" exactlyOnce="true" timeToLive="00:05:00" 
                     deadLetterQueue="Custom" durable="true"
                     customDeadLetterQueue="net.msmq://localhost/private/deadlog" >
              <security mode="None" />
            </binding>
          </netMsmqBinding>
        </bindings>
        <client>
          <endpoint address="net.msmq://10.16.112.254/private/log" binding="netMsmqBinding"
              bindingConfiguration="NetMsmqBinding_ILog" contract="MSMQLog.ILog"
              name="NetMsmqBinding_ILog" />
        </client>
      </system.serviceModel>
    </configuration>

    测试结果如下:

        下图可以看到死信为 ./private$/deadlog ,但为什么不再我配置的 deadlog 队列中,还是在系统的死信队列中?

    2012年4月13日 7:22

答案

  • System表示系统死信队列用于存储死消息,系统死信队列由计算机上运行的所有应用程序共享。Custom使用 CustomDeadLetterQueue 属性指定的自定义死信队列用于存储死消息,CustomDeadLetterQueue 属性表示要用作死信队列的特定队列。此属性仅在 Windows Vista 中可用.详细内容可以参考:http://msdn.microsoft.com/zh-cn/library/ms752268.aspx

    Please mark the replies as answers if they help or unmark if not. If you have any feedback about my replies, please contact msdnmg@microsoft.com Microsoft One Code Framework

    2012年4月18日 2:59
    版主
  • 根据文档的描述,CustomDeadLetterQueue 属性是在Windows Vista中可用,但我看的书《WCF服务编程》中的描述,是在Windows Vista及其以上版本都可以使用的,根据微软的产品来说,都会兼容低级版本,我认为Windows 7也是能支持该属性的,不知道有人试验过吗?同样的代码在Windows Vista和Windows 7中测试一下,不过现在Windows Vista 难找呀。
    2012年4月25日 3:41

全部回复