【问题标题】:MessageQueueException (0x80004005): Access to Message Queuing system is deniedMessageQueueException (0x80004005):对消息队列系统的访问被拒绝
【发布时间】:2011-09-24 14:35:19
【问题描述】:

我有一个在 Windows 2003 服务器上运行良好的现有应用程序。我一直将它移动到 Windows 2008r2,当应用程序尝试访问队列时,它会收到以下错误?我的应用程序池的 Indentity 用户可以完全控制我的消息队列。有没有人对如何解决这个问题有任何想法。我相信这是服务器配置问题。

[MessageQueueException (0x80004005): Access to Message Queuing system is denied.]
   System.Messaging.MQCacheableInfo.get_ReadHandle() +221
   System.Messaging.MessageEnumerator.get_Handle() +70
   System.Messaging.MessageEnumerator.MoveNext(TimeSpan timeout) +93
   System.Messaging.MessageQueue.GetAllMessages() +58
   NServiceBus.Unicast.Subscriptions.Msmq.MsmqSubscriptionStorage.Init(IList`1 messageTypes) +124
   NServiceBus.Unicast.UnicastBus.Start(Action`1[] startupActions) +674
   Connector.Service.InitBus() +201
   Connector.OutgoingService..cctor() +9

【问题讨论】:

  • 你试过这个解决方案了吗:stackoverflow.com/questions/3731627/…
  • 这是与队列在同一台机器上运行的应用程序吗?此外,队列权限的一个简单测试是暂时将完全控制权授予Everyone+AnonymousLogon。如果这样可行,则队列权限错误。
  • 我通过卸载队列功能并在 windows 2008 中重新添加解决了这个问题。

标签: msmq nservicebus


【解决方案1】:

还添加了“匿名登录”的权限,并且有效。

【讨论】:

  • 但这并不是真正的解决方案。
【解决方案2】:

我还得到了以下内容:

System.Messaging.MessageQueueException (0x80004005):拒绝访问消息队列系统。生成自:NServiceBus.Utils.MsmqUtilities。

在“错误”队列上授予“所有人”权限解决了问题。

【讨论】:

  • 对我来说,允许“所有人”是不够的。我为“匿名登录”添加了权限,以实际允许该服务让任何人运行它。
【解决方案3】:

我也使用 2008 R2,是的,实际创建的队列名称是小写的,但在我的代码中,使用大写访问它效果很好。

【讨论】:

    【解决方案4】:

    当我从 Win 2003 迁移到 Win 2008 R2 时,我也有同样的经历 - 结果发现,当我使用 .NET API 创建队列时,2008 R2 会创建带有小写字母的队列。稍后,当应用程序尝试访问队列时,它无法使用大写字母访问它们(给出您声明的错误)。使用小写即可解决问题。

    /AZ

    【讨论】:

      猜你喜欢
      • 2012-04-10
      • 2011-04-28
      • 2012-11-05
      • 2011-03-27
      • 1970-01-01
      • 2013-11-07
      • 2014-10-04
      • 1970-01-01
      相关资源
      最近更新 更多