访问消息队列系统被拒绝

时间:2012-03-26 15:04:46

标签: msmq

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

11 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:9)

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

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

  

拒绝访问消息队列系统

错误。

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

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

重新启动MSMQ服务和IIS:

NET STOP MSMQ
NET START MSMQ
IISRESET

答案 2 :(得分:7)

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

您还可以获得其他原因:

Failing to read from remote MSMQ queues

答案 3 :(得分:6)

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
    • 重新启动消息队列服务。
  5. 在Windows 7(客户端)中: 使用FormatName:DIRECT=OS:MachineName\private$\UrQueueName

    创建Rc消息队列

    示例:

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

答案 4 :(得分:4)

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

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

答案 5 :(得分:3)

感谢这篇文章,我已经能够删除“拒绝访问”问题: 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的最新文件(检查是否是正确的文件,此处的每个文件都可以用记事本打开)然后复制属性安全性的值
  5. 找到与问题队列关联的文件,将其粘贴到上一步中复制的值
  6. 删除与FA1相关联的文件
  7. 打开之前关闭的两项服务
  8. 转到“服务器管理器”
  9. 不应再出现错误消息

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

答案 6 :(得分:2)

对我们来说,这是因为测试程序创建了队列......

解决方案:删除队列,并让正确凭据下正确的进程重新创建。

答案 7 :(得分:1)

这对我们有用: 服务器管理器 - >特点 - >消息队列 - >右键单击 - >属性 - >服务器安全性

取消选中:“禁用未经过身份验证的RPC调用”

答案 8 :(得分:0)

这可能会变成令人沮丧的问题。在我的场景中,异常抛出在 BeginReceive()上。我有一个由 .Net 2.0 应用程序创建的现有消息队列,我试图在另一个运行在 .Net 4.0 上的应用程序中使用它。解决方案是删除MSMQ(位于C:\ Windows \ System32 \ msmq \ storage \ lqs),并使用.Net 4.0重新创建它。

答案 9 :(得分:0)

在我们的示例中,更改调用Peek MSMQ的Web服务的应用程序池标识有助于解决在服务器迁移后开始发生的此问题。

我们必须将App Pool Identity从“ApplicationPoolIdentity”更改为“NetworkService”。之后它起作用了。

答案 10 :(得分:-1)

请登录您的服务器管理员,并检查已分配"发送消息"的消息队列属性。 ,"偷看消息"和IIS用户或所有人的其他所需权限..