无法从本地计算机上的MSMQ读取

时间:2012-03-27 18:37:47

标签: msmq acl

我在本地计算机上有一个用我的用户帐户创建的公共消息队列。我的本地计算机上也有一个Windows服务,它在公司服务帐户下运行。我已授予服务帐户对队列的完全访问权限,但是当服务运行时,它似乎无法读取队列中的消息。我觉得我错过了一些基本的东西,但我无法弄清楚它是什么。

代码:

string queuePath = "FormatName:DIRECT=TCP:127.0.0.1\MyQueue";
MessageQueue _queue = new MessageQueue(queuePath);

当我单步执行代码时,在创建_queue对象之后,CanRead属性始终为false。我已经尝试了几种不同的方法来设置队列路径(“DIRECT = OS:。\ MyQueue”,“PUBLIC = [guid]”,并且不使用格式名称),但没有任何成功。

MSDN documentation表示“如果队列已经打开并具有独占读访问权限(或者如果它以非独占访问方式打开并且此MessageQueue请求独占访问权限),或者如果应用程序没有访问权限,则”CanRead为false有足够的权利来访问它。“

我确保应用程序有足够的权限(我认为),但是如何判断其他内容是否具有“独占读取权限”呢?还有什么我想念的吗?

感谢。

1 个答案:

答案 0 :(得分:1)

为什么使用公共队列?您应该尝试将队列重新创建为私有(队列地址将更改为FORMATNAME:DIRECT=TCP:127.0.0.1\PRIVATE$\MyQueue)并查看是否可以解决您的问题。

我已经使用MSMQ五年了,从未使用过公共队列。我实际上并不了解它们的用途。但是根据经验,尝试使用它们的人通常在身份验证方面遇到更多困难。