有没有办法清除传出队列。我似乎无法使用MMC管理单元执行此操作,当我尝试在代码中清除它时,我收到错误Format name is invalid
它发送消息的计算机不存在,因此它们永远不会存在发送,但队列填满了MSMQ的最大存储空间,所以每当我的应用程序尝试发送另一条消息时,我得到insufficient resources
异常。
我已经尝试了以下格式,但它们都失败了format name is invalid
例外
DIRECT = OS:电脑\私人$ \ QUEUENAME
OS:电脑\私人$ \ QUEUENAME
电脑\私人$ \ QUEUENAME
答案 0 :(得分:6)
您应该能够从MMC管理单元中手动清除它。当MSMQ达到其存储限制时会变得非常吝啬,因此很多操作都会因“权限被拒绝”等原因而失败。
长期解决方案显然是修改配置,以便为您的特定使用模式提供足够的存储空间。
编辑:您可能遇到与管理功能和远程队列相关的托管API中的限制。看看Ingo Rammer的this文章。它甚至包括一个p调用示例。
答案 1 :(得分:3)
可以使用托管代码清除传出队列:
using (var msgQueue = new MessageQueue(GetPrivateMqPath(queueName, remoteIP), QueueAccessMode.ReceiveAndAdmin))
{
msgQueue.Purge();
}
其中GetPrivateMqPath为:
if (!string.IsNullOrEmpty(remoteIP))
return String.Format("FORMATNAME:DIRECT=TCP:{0}\\private$\\{1}", remoteIP, queueName);
else
return @".\private$\" + queueName;
QueueAccessMode.ReceiveAndAdmin指向传出队列。
答案 2 :(得分:1)
您可以尝试FORMATNAME:DIRECT=OS:computer\PRIVATE$\queuename
。