编程语言
首页 > 编程语言> > c# – 无法以编程方式查看远程(私有)msmq:拒绝访问消息队列系统

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();

标签:c,msmq
来源: https://codeday.me/bug/20190611/1221771.html