MSMQ问题读取远程私人队列(再次)

时间:2011-08-08 14:36:17

标签: windows-7 windows-xp msmq

好的,我的问题类似于How to receive message from a private workgroup queue(我基本上使用相同的代码)。

我正在使用

在主机上创建队列
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
  3. 当我在W7系统上创建专用队列并尝试编写然后从XP系统读取队列时(根据引用的问题),它在读取操作上失败并显示“消息队列服务不可用”异常。

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

    我已经完成了工作:

    1. Reading Messages from Remote Queues
    2. Understanding how MSMQ security blocks RPC traffic
    3. Getting MSMQ messages out of Windows Server 2008 remotely
    4. Clear the way - MSMQ coming through
    5. MSMQ 3.0 too secure for you?
    6. 我也试过关闭W7和XP防火墙,并且让每个人和他的狗对队列本身的完全权限都无济于事。

      鉴于它可以作为队列主机使用XP,但不能使用W7作为主机,我认为这是一个安全问题,而不是代码问题。但是对于我的生活,我无法看到W7中堵塞的位置。

      编辑8/9

      确定..添加

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

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

      GetPrivateQueueByMachine(String machineName)
      

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

1 个答案:

答案 0 :(得分:6)

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

MSMQ 4.0 - what's new in Computer Management?

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

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

并将值设置为1。

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

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