c#中查询MSMQ系统队列
本文关键字:系统 队列 MSMQ 查询 | 更新日期: 2023-09-27 18:17:43
我使用系统的非常方便的GetPrivateQueuesByMachine和GetPublicQueuesByMachine方法。消息名称空间。我找不到对应的GetSystemQueuesByMachine,所以我自己写了一个:
private MessageQueue[] GetSystemQueuesByMachine(string hostName)
{
MessageQueue[] queueList = new MessageQueue[3];
// System Journal
string queuePath = GetQueuePath(hostName, "system$;JOURNAL");
queueList[0] = new MessageQueue(queuePath);
// Get the Dead Letter queue
queuePath = GetQueuePath(hostName, "system$;DEADLETTER");
queueList[1] = new MessageQueue(queuePath);
// Transactional Dead Letter Queue
queuePath = GetQueuePath(hostName, "system$;DEADXACT");
queueList[2] = new MessageQueue(queuePath);
return queueList;
}
private static string GetQueuePath(string hostName, string queueName)
{
return "FormatName:DIRECT=OS:" + hostName + @"'" + queueName;
}
返回的queuePath看起来是正确的:
" FormatName:直接= OS: localhost '系统美元;期刊"
但是当我尝试访问QueueName属性或调用GetAllMessages()方法时抛出异常:
"指定的格式名不支持请求的操作。例如,不能删除直接队列格式名称。"
任何想法我如何可以编程检索系统队列的内容(系统日志,死信和死信事务)?
所以,结果是MessageQueue类的某些属性对于System队列的实例是不可访问的。QueueName就是其中之一!
我最终创建了一个自定义类SystemMessageQueue,带有一个自定义方法GetSystemQueuesByMachine。这将返回具有用于填充ListView的自定义名称的MessageQueue实例,并且我仍然可以对MessageQueue实例使用GetAllMessages()。