我试图从我的主机访问队列消息,同时尝试获取消息我得到"访问消息队列系统被拒绝." 信息.不知道如何解决这个问题.我使用Windows 7作为客户端系统,服务器是Windows 2008 R2 Server
Gla*_*lor 26
我试图通过ASP.NET(Windows 7)写入MSMQ遇到同样的问题.我添加了"接收消息""Peek消息"和"发送消息"权限,现在它可以正常工作.如果您通过ASP.NET运行它,那么您可能在IIS_IUSRS帐户下.
在我的例子中,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中:
控制Panel->Administration Tools->Computer Management.
在Computer Management->Services and Applications->Message Queuing->Private Queues.
[UrQueueName] -> Properties -> Security
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)
感谢这篇文章,我已经能够消除“访问被拒绝”的问题:https : //codifying.wordpress.com/2012/04/16/msmq-solving-access-denied-errors-for-private-queues /
...令人沮丧,该队列在“服务器管理”中的“专用队列”下列出,但我无法:
错误消息应该不再出现
但是...在尝试读取/连接到该队列时,您的软件可能会遇到另一个问题,它将抱怨它没有足够的特权,因此最后一步是转到该队列的高级属性并设置完整的队列。控制对所有人的访问(嗯,也许您将指定一个特定用户,但这是我所做的,以确保不会在自己的开发服务器上被阻止)。
造成此错误的原因有很多。第一,可能是安全。您需要确保运行应用程序的帐户具有对队列的读/写访问权限(或根据需要具有较高的权限级别)。
其次,确保如果队列是事务性的,则您为其使用正确的事务模式。或者,如果队列不是事务性的,那么您在读取或写入时不会尝试将事务模式传递给它。