c# – 无法以编程方式查看远程(私有)msmq:拒绝访问消息队列系统
作者:互联网
我有一个非常简单的控制台应用程序,无法查看远程专用队列中的消息.
var queues = MessageQueue.GetPrivateQueuesByMachine(machineName);
var queue = queues.Where(x=>x.FormatName == queueName).Single();
Message message = queue.Peek();
Peek调用失败,MessageQueueException为“拒绝访问消息队列系统”.
使用相同的客户端计算机和用户,我可以使用队列资源管理器和消息队列管理单元查看队列.
尝试使用本地队列我只能通过取消队列中的Peek权限来重现错误,但也会在其他工具中停止它.
我已经看到很多信息指出了here概述的问题.
但是,似乎任何这些问题都是问题,我也无法使用其他工具.
编辑
我已经能够使用MSMQQueueInfo/MSMQQueue COM对象使其工作,而无需更改任何凭据.
如果我可以使用.NET库使其工作,那将是很好的,但至少我有一个解决方法.
解决方法:
我的问题是,当使用GetPrivateQueuesByMachine获取队列时,它使用SendAndReceive的访问模式,这要求获得更多权限.我不得不使用MessageQueue构造函数来指定AccessMode. (在这种情况下是Peek.)
最后,我能够使用类似于以下的代码来实现此功能:
var queue = new MessageQueue(@"FormatName:DIRECT=OS:machineName\private$\queueName", QueueAccessMode.Peek);
Message message = queue.Peek();