访问消息队列系统被拒绝

pra*_*kar 46 msmq

我试图从我的主机访问队列消息,同时尝试获取消息我得到"访问消息队列系统被拒绝." 信息.不知道如何解决这个问题.我使用Windows 7作为客户端系统,服务器是Windows 2008 R2 Server

Gla*_*lor 26

我试图通过ASP.NET(Windows 7)写入MSMQ遇到同样的问题.我添加了"接收消息""Peek消息"和"发送消息"权限,现在它可以正常工作.如果您通过ASP.NET运行它,那么您可能在IIS_IUSRS帐户下.

  • 在计算机管理下(右键单击开始菜单中的"计算机"并选择"管理"),转到"消息队列"部分,右键单击所需的队列名称,然后选择"属性" - >单击"安全" "选项卡,您可以在那里管理权限. (7认同)

Fre*_*ing 9

在我的例子中,MSMQ队列由我自己的Windows用户帐户(本地管理员)拥有,因为它们是通过以管理员模式从Visual Studio运行控制台应用程序创建的.

我的网络应用程序运行NETWORK SERVICE,产生了

访问消息队列系统被拒绝

错误.

我通过NETWORK SERVICE完全控制来解决这个问题:

计算机管理>服务和应用程序>消息队列>私有Qeues> 右键单击队列 >属性>安全性

重新启动MSMQ服务和IIS:

NET STOP MSMQ
NET START MSMQ
IISRESET
Run Code Online (Sandbox Code Playgroud)


小智 8

Server2008中:

  1. 控制Panel->Administration Tools->Computer Management.

  2. Computer Management->Services and Applications->Message Queuing->Private Queues.

  3. 右键点击 [UrQueueName] -> Properties -> Security
    • 将每个人都设置为完全控制
    • 将ANONYMOUS LOGON设置为完全控制.
  4. 在电脑里 Management -> Services
    • 重新启动消息队列服务.

在Windows 7(客户端)中:使用创建Rc消息队列 FormatName:DIRECT=OS:MachineName\private$\UrQueueName

例:

rcmq = new System.Messaging.MessageQueue(string.Format("FormatName:DIRECT=OS:{0}\\private$\\{1}", rcMachineName,rcQueueName)); 
Run Code Online (Sandbox Code Playgroud)


Joh*_*ell 7

如果你试图从远程队列中读取消息,那么权限是罪魁祸首,正如kprobst所提到的那样.

您还可以获得其他原因:

无法从远程MSMQ队列中读取


Mic*_*lix 5

感谢这篇文章,我已经能够消除“访问被拒绝”的问题:https : //codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for-private-queues /

原来的问题

...令人沮丧,该队列在“服务器管理”中的“专用队列”下列出,但我无法:

  • 删除=> 权限被拒绝
  • 编辑安全权限=> 权限被拒绝
  • 查看队列中剩余的消息=> 权限被拒绝

解决方案

  1. 手动创建一个队列(稍后使用),我们称其为FA1
  2. 关闭服务:消息队列(用于Net.Msmq的+侦听器适配器)
  3. 然后转到System32 / msmq / storage / lqs
  4. 查找FA1的最新文件(检查文件是否正确,可以使用记事本打开此处的每个文件),然后复制属性Security的值
  5. 找到与问题队列关联的文件,将在上一步中复制的值粘贴到该文件
  6. 删除与FA1关联的文件
  7. 打开两个先前关闭的服务
  8. 转到服务器管理器

错误消息应该不再出现

但是...在尝试读取/连接到该队列时,您的软件可能会遇到另一个问题,它将抱怨它没有足够的特权,因此最后一步是转到该队列的高级属性并设置完整的队列。控制对所有人的访问(嗯,也许您将指定一个特定用户,但这是我所做的,以确保不会在自己的开发服务器上被阻止)。


kpr*_*bst 4

造成此错误的原因有很多。第一,可能是安全。您需要确保运行应用程序的帐户具有对队列的读/写访问权限(或根据需要具有较高的权限级别)。

其次,确保如果队列是事务性的,则您为其使用正确的事务模式。或者,如果队列不是事务性的,那么您在读取或写入时不会尝试将事务模式传递给它。

  • 事务性/非事务性不会产生拒绝访问错误。您应该收到特定于事务的错误 - 0xC00E0050 (MQ_ERROR_TRANSACTION_USAGE)。 (2认同)