MSMQ 读取远程专用队列时出现问题(再次)

问题描述 投票:0回答:2

好吧,我的问题类似于如何从私有工作组队列接收消息(我基本上使用相同的代码)。

我正在使用

在主机上创建队列
MessageQueue.Create(@".\Private$\MyNewPrivateQueue");

使用

打开远程计算机上的队列
var queue = new MessageQueue(@"FormatName:DIRECT=TCP:xxx.xxx.xxx.xxx\PRIVATE$\MyNewPrivateQueue");

并使用queue.send()和queue.Receive()写入/读取数据

我正在试验两个系统。

  1. Windows 7 家庭高级版 x64
  2. Windows XP SP3

当我在 W7 系统上创建专用队列并尝试从 XP 系统写入然后读取队列时(根据引用的问题),它会失败,并在读取操作上出现“消息队列服务不可用”异常。

但是,当我反转系统(在 XP 系统上创建队列并从 W7 系统写入/读取,并使用相同的代码)时,它按预期工作

我已经解决了:

  1. 从远程队列读取消息
  2. 了解 MSMQ 安全性如何阻止 RPC 流量
  3. 从 Windows Server 2008 远程获取 MSMQ 消息
  4. 清理道路 - MSMQ 过来
  5. MSMQ 3.0 对您来说太安全了吗?

我也尝试过关闭W7和XP防火墙,并给予每个人和他的狗对队列本身的完全权限,但无济于事。

鉴于它适用于 XP 作为队列主机,但不适用于 W7 作为主机,我认为这是一个安全问题,而不是代码问题。 但我怎么也看不出 W7 的堵塞在哪里。

编辑8/9

好的..添加

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC 

允许我从远程专用队列读取消息。 然而,这似乎不允许使用

GetPrivateQueueByMachine(String machineName)

枚举可用的私有队列。 那么对此有什么想法吗?

windows-7 windows-xp msmq
2个回答
6
投票

好吧..我显然没有读完我需要读的所有内容。 答案是:

MSMQ 4.0 - 计算机管理中有哪些新增功能?

我需要添加一个新的注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC

并将值设置为 1。

一旦我在 W7 服务器上执行此操作,我就可以从 XP 计算机上读取队列。

我是唯一一个认为任何人都可以写入队列但我必须将其设置为从队列中读取这很奇怪的人吗? 这太奇怪了。


0
投票

我已取消选中“禁用未经身份验证的 RPC 调用”复选框。重新启动服务器,但从另一台服务器读取操作时仍然出现“消息队列服务不可用”异常失败。 我的情况是,我正在读取的队列位于云托管服务器上,并且本地服务器出现读取错误。 我唯一能想到的是服务器防火墙中没有启用 RPC: 135。

© www.soinside.com 2019 - 2024. All rights reserved.