尝试从死信队列中删除时出现错误请求

Bad request when trying to delete from the dead-letter queue

我正在尝试使用以下代码从死信队列中删除消息:

QueueDescription qd = _queueManager.GetQueue(queueID);
QueueClient qc = _senderFactory.CreateQueueClient(queueID, ReceiveMode.ReceiveAndDelete);

received = qc.ReceiveBatch(deadMessageCount);
while (received != null && received.Count<BrokeredMessage>() > 0)
  received = qc.ReceiveBatch(deadMessageCount); // just in case

并不断获得:

The remote server returned an error: (400) Bad Request. The specified HTTP verb (GET) is not valid. TrackingId:104cc11d-21b5-440c-adde-e9ce9afb0603_G25,TimeStamp:1/24/2015 8:44:10 AM

这里有什么问题?

这一行是罪魁祸首:QueueDescription qd = _queueManager.GetQueue(queueID);因为你无法获得死信队列。您必须获取队列本身,然后使用格式化方法。呸!

我 运行 遇到了同样的问题,试图从死信队列中获取计数。貌似deadletterqueue不允许你直接获取计数,你从普通Queue的MessageCountDetails中获取。

不起作用

NamespaceManager nsmgr = Microsoft.ServiceBus.NamespaceManager
    .CreateFromConnectionString(connectionString);
return  nsmgr.GetQueue(QueueClient.FormatDeadLetterPath(QueueName))
    .MessageCountDetails.DeadLetterMessageCount;

有效

return nsmgr.GetQueue(QueueName).MessageCountDetails.DeadLetterMessageCount;

记得对deadletterqueue进行操作你还需要在queue client中指定正确的p。

QueueClient.CreateFromConnectionString(connectionString,
    QueueClient.FormatDeadLetterPath(QueueName));