【问题标题】:Cannot read from MSMQ on local machine无法从本地计算机上的 MSMQ 读取
【发布时间】:2012-04-11 08:06:25
【问题描述】:

我在本地计算机上有一个使用我的用户帐户创建的公共消息队列。我的本地计算机上也有一个 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访问它。”

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

谢谢。

【问题讨论】:

  • 嗯,这很尴尬。原来我为错误的服务帐户设置了 ACL。一旦我将其更改为正确的帐户,它就很高兴。这里没什么可看的,伙计们,继续前进。

标签: msmq acl


【解决方案1】:

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

我已经使用 MSMQ 五年了,从未使用过公共队列。我真的不明白他们是为了什么。但是根据经验,尝试使用它们的人通常在身份验证方面遇到更多困难。

【讨论】:

  • 我可以确认这一点。在所有情况下,我们都以私有 qs 和直接格式名称结束。
  • 公共队列和私有队列的区别:link。我们需要额外的 AD 链接安全性以及集中备份队列注册。我不能将私人队列用于公司范围的系统。
  • 休,公共队列是 Active Directory 中的对象。对公共队列有问题的人通常在 Active Directory 和域/林安全方面的经验有限。
猜你喜欢
  • 2020-12-29
  • 1970-01-01
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 2017-11-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-11
相关资源
最近更新 更多