我在本地计算机上有一个用我的用户帐户创建的公共消息队列。我的本地计算机上也有一个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有足够的权利来访问它。“
我确保应用程序有足够的权限(我认为),但是如何判断其他内容是否具有“独占读取权限”呢?还有什么我想念的吗?
感谢。
答案 0 :(得分:1)
为什么使用公共队列?您应该尝试将队列重新创建为私有(队列地址将更改为FORMATNAME:DIRECT=TCP:127.0.0.1\PRIVATE$\MyQueue
)并查看是否可以解决您的问题。
我已经使用MSMQ五年了,从未使用过公共队列。我实际上并不了解它们的用途。但是根据经验,尝试使用它们的人通常在身份验证方面遇到更多困难。