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

Windows 7 MSMQ读取远程专用队列时出现问题(再次),windows-7,windows-xp,msmq,Windows 7,Windows Xp,Msmq,好的,我的问题类似于(我基本上使用相同的代码) 我正在主机上使用创建队列 MessageQueue.Create(@".\Private$\MyNewPrivateQueue"); 使用打开远程计算机上的队列 var queue = new MessageQueue(@"FormatName:DIRECT=TCP:xxx.xxx.xxx.xxx\PRIVATE$\MyNewPrivateQueue"); 以及使用queue.send()和queue.Receive()写入/读取数据 我正在试

好的,我的问题类似于(我基本上使用相同的代码)

我正在主机上使用创建队列

MessageQueue.Create(@".\Private$\MyNewPrivateQueue");
使用打开远程计算机上的队列

var queue = new MessageQueue(@"FormatName:DIRECT=TCP:xxx.xxx.xxx.xxx\PRIVATE$\MyNewPrivateQueue");
以及使用queue.send()和queue.Receive()写入/读取数据

我正在试验两种系统

  • Windows 7家庭高级版x64
  • WindowsXPSP3
  • 当我在W7系统上创建专用队列并尝试从XP系统写入然后读取队列时(根据参考问题),它失败,读取操作出现“Message queue Service is not available”(消息队列服务不可用)异常

    但是,当我反转系统时(在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机器上读取队列


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

    不,不奇怪。队列的发送和接收使用完全不同的网络协议。MSMQ(和HTTP)协议用于发送/推送消息;RPC协议用于接收/拉取消息。这些协议实际上是粉笔和奶酪,有着完全不同的麻烦点。@John。。好的,考虑到使用了两种不同的协议,我可以看到这意味着读/写的行为不同,所以这并不像我想象的那么奇怪。另一方面两个完全不同的协议;-)是:-)MSMQ设计于20世纪90年代中期,是在互联网出现之前,作为一种适用于公司局域网的推送技术。RPC已经可用,因此无需重新发明轮子。如果MSMQ是在过去5-10年中设计的,它会有很大的不同。这与右键单击(在计算机管理、服务和应用程序内部)消息队列、属性、服务器安全选项卡并清除“禁用未经身份验证的RPC调用”复选框相同吗?@John根据此链接,是: