好吧,我的问题类似于如何从私有工作组队列接收消息(我基本上使用相同的代码)。
我正在使用
在主机上创建队列MessageQueue.Create(@".\Private$\MyNewPrivateQueue");
使用
打开远程计算机上的队列var queue = new MessageQueue(@"FormatName:DIRECT=TCP:xxx.xxx.xxx.xxx\PRIVATE$\MyNewPrivateQueue");
并使用queue.send()和queue.Receive()写入/读取数据
我正在试验两个系统。
当我在 W7 系统上创建专用队列并尝试从 XP 系统写入然后读取队列时(根据引用的问题),它会失败,并在读取操作上出现“消息队列服务不可用”异常。
但是,当我反转系统(在 XP 系统上创建队列并从 W7 系统写入/读取,并使用相同的代码)时,它按预期工作。
我已经解决了:
我也尝试过关闭W7和XP防火墙,并给予每个人和他的狗对队列本身的完全权限,但无济于事。
鉴于它适用于 XP 作为队列主机,但不适用于 W7 作为主机,我认为这是一个安全问题,而不是代码问题。 但我怎么也看不出 W7 的堵塞在哪里。
编辑8/9
好的..添加
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC
允许我从远程专用队列读取消息。 然而,这似乎不允许使用
GetPrivateQueueByMachine(String machineName)
枚举可用的私有队列。 那么对此有什么想法吗?
好吧..我显然没有读完我需要读的所有内容。 答案是:
我需要添加一个新的注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSMQ\Parameters\Security\AllowNonauthenticatedRPC
并将值设置为 1。
一旦我在 W7 服务器上执行此操作,我就可以从 XP 计算机上读取队列。
我是唯一一个认为任何人都可以写入队列但我必须将其设置为从队列中读取这很奇怪的人吗? 这太奇怪了。
我已取消选中“禁用未经身份验证的 RPC 调用”复选框。重新启动服务器,但从另一台服务器读取操作时仍然出现“消息队列服务不可用”异常失败。 我的情况是,我正在读取的队列位于云托管服务器上,并且本地服务器出现读取错误。 我唯一能想到的是服务器防火墙中没有启用 RPC: 135。