我正在尝试使用以下代码查询我机器上的本地队列:
var c = new MessageQueueCriteria();
c.MachineName = Environment.MachineName;
var queues = MessageQueue.GetMessageQueueEnumerator(c);
但代码在第二行引发异常抱怨:
工作组安装计算机不支持该操作。
堆栈跟踪:在System.Messaging.MessageQueue.GetMachineId(String machineName) at System.Messaging.MessageQueueCriteria.set_MachineName(String value)
并将MessageQueueErrorCode枚举设置为System.Messaging.MessageQueueErrorCode.UnsupportedOperation。
奇怪的是我在一个域而不是一个工作组!和其他应用程序(QueueExplorer)似乎工作文件。我有什么想法可以解决它吗?
更新:似乎错误来自运行属性设置器中的这段代码,但不知道如何修复它。
new MessageQueuePermission(MessageQueuePermissionAccess.Browse, "*").Demand();
答案 0 :(得分:1)
使用 GetPublicQueues 方法时, MessageQueueCriteria 类用于过滤 PUBLIC 消息队列。为了能够浏览公共队列,您必须启用 MSMQ Active Directory服务集成功能。如果您的计算机加入域名是不够的。
如果您想浏览本地 PRIVATE 队列,请使用:
MessageQueue[] queues = MessageQueue.GetPrivateQueuesByMachine(Environment.MachineName);