【问题标题】:Cannot programmatically peek into a remote (private) msmq: Access to Message Queuing system is denied无法以编程方式查看远程(私有)msmq:拒绝访问消息队列系统
【发布时间】:2015-11-23 08:10:14
【问题描述】:

我有一个非常简单的控制台应用程序,它无法查看远程私人队列中的消息。

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 库让它工作就好了,但至少我有一个解决方法。

【问题讨论】:

  • 你在 machineName 和 queueName 中放了什么?你是如何初始化它们的?您如何以及将什么消息放入 MessageQueue?
  • 这个例子有点简化。我在列出队列或选择我感兴趣的特定队列时没有任何问题。对于这种特殊情况,我正在查看来自我们的一个生产应用程序的错误队列。我知道队列中有消息,因为我可以使用其他工具查看它们。
  • 你配置了哪些权限?

标签: c# msmq


【解决方案1】:

我的问题是当GetPrivateQueuesByMachine 用于获取队列时,它使用SendAndReceive 的访问模式,它要求比我拥有的更多权限。我必须使用 MessageQueue 构造函数来指定 AccessMode。 (在本例中为 Peek。)

最后,我能够使用类似于以下的代码使其工作:

var queue = new MessageQueue(@"FormatName:DIRECT=OS:machineName\private$\queueName", QueueAccessMode.Peek);
Message message = queue.Peek();

【讨论】:

    【解决方案2】:

    我也有同样的问题。就我而言,我在父线程中初始化消息队列并在子线程中访问 Peek 函数。

    如果您使用多线程,请尽量在同一个线程中保持初始化和函数访问。

    【讨论】:

      【解决方案3】:

      队列出现在各种实用程序中并不能告诉您太多。这样的实用程序不太可能偷看消息。通常,默认访问权限允许每个人查看队列并向其发布消息。但不检索它们。

      在拥有此队列的计算机上,使用控制面板 > 管理工具 > 计算机管理 > 服务和应用程序 > 消息队列 > 专用队列。选择队列并右键单击 > 属性 > 安全选项卡。请注意 Everbody 如何拥有某些权限,例如“获取属性”和“发送消息”。但不是“Peek Message”。

      明智的做法是添加您在另一台机器上使用的用户帐户并勾选完成工作所需的权限。如果这台机器是由管理员管理的,那么你需要让他们为你做这件事。

      【讨论】:

      • 我无权访问机器本身,也无法查看权限。队列出现在我要离开的其他实用程序中并不是事实。就是我可以查看完整的消息并做几乎任何我想做的事情。例如,我经常从错误队列中复制消息并重播它们。我以 peek 为例,但我无法让我的应用程序执行我使用其他工具能够执行的任何相同操作。我正在尝试自动执行一些我经常使用其他工具执行的任务,因此我知道我必须拥有执行此操作所需的权限,即使我看不到它们。
      • 我也很怀疑。这就是为什么我建议让管理员来处理它。 “我仍然可以做到这一点”仍然不是灌篮,查看错误队列不是一回事,“重播”当然不是问题,因为每个人都可以发送消息。与管理员交谈,以便了解事实
      • 我已向管理员确认我确实拥有窥视权限。
      • 那么您就遇到了用户帐户的问题。就像使用只有您运行它的机器知道的帐户而不是其他机器也知道的域帐户一样。或者机器不在同一个域中。登录时注意域名。请让管理员回头看,他很可能会发现哎呀。确保您有访问权限是他的工作。
      猜你喜欢
      • 2012-04-10
      • 2011-04-28
      • 2013-06-22
      • 2011-09-24
      • 1970-01-01
      • 2011-08-18
      • 2012-10-16
      • 2010-11-06
      相关资源
      最近更新 更多