【问题标题】:Send to remote MSMQ silently fails发送到远程 MSMQ 静默失败
【发布时间】:2013-09-29 22:12:48
【问题描述】:

我正在尝试将消息发送到 C# 中的远程消息队列。

这是我正在使用的路径:

FormatName:Direct=TCP:192.168.0.10\private$\test_in

.Send 方法无异常通过,但远程队列中没有消息出现。奇怪的是,我可以毫无问题地从同一个队列中接收。

远程机器上的队列是非事务性的,我的本地机器上的代码也是如此。它还具有对“所有人”的“完全访问权限”。

我已经阅读了一些对有类似问题的人的回复,但似乎没有一个解决方案适用于我。我检查了本地计算机上的传出队列部分,它们都显示为“已连接”到远程队列,但也表明没有发送任何消息。好像还没试过。

任何想法我的问题可能是什么?谢谢。

编辑:更多信息 - 本地机器是 Windows 8。远程机器是 Windows Server 2012。

编辑:休的回答让我找到了真正的原因。我需要将匿名登录权限添加到远程队列(“每个人”都不够)。希望这对某人有所帮助。

【问题讨论】:

    标签: c# msmq message-queue


    【解决方案1】:

    休的回答让我找到了真正的原因。我需要将匿名登录权限添加到远程队列(“每个人”都不够)。希望这对某人有所帮助。

    【讨论】:

    • 在我的情况下,匿名登录不是解决办法,但让“所有人”完全控制才是诀窍!
    • @BrienFoss 这是因为您的发件人与您的收件人在同一个 AD 域中。
    • 那么,如果不尝试 100 种不同的方法直到它奏效,如何才能真正断定这是正在发生的事情呢?是否没有日志可以让您查看问题所在?
    【解决方案2】:

    在发送机器上已经创建了一个传出队列,而这个队列没有消息,这意味着消息已经传送到接收机器。

    所以问题将出在接收机器上。可能是队列权限。机器是否在不同的 Windows 域中?

    如果启用 msmq 事件日志(事件查看器 -> 应用程序和服务日志 -> Microsoft -> Windows -> MSMQ),您应该能够准确看到消息到达后发生的情况。

    【讨论】:

    • 我收到“通过网络接收的消息”消息,但没有其他消息。谢天谢地,这使我搜索了该消息并找到了实际原因,因此感谢您提供线索!
    • 我的意思是添加匿名登录,因此我询问了不同的域。该死的
    • 如何启用 msmq 事件日志?
    • @Kiquenet 打开日志后,我认为右侧有一个“启用”按钮。
    • 对我来说,远程日志中也没有显示任何内容。在本地日志中显示消息已发送
    【解决方案3】:

    在我的情况下,消息也没有显示在远程专用队列中。我在这里查看了一个答案,并将“每个人”完全控制在私有队列中,然后消息开始填充队列。 然而,经过一点改进,我确定“每个人”都不适合我的情况。 我的目标是让生产服务器将消息写入开发服务器。所以最后我需要做的就是将服务器/工作站名称添加到这个安全列表中,并且只有“发送”权限。

    单击“添加”按钮,然后在 Active Directory 计算机对象类型列表中找到您的服务器/工作站名称。

    【讨论】:

      【解决方案4】:

      检查格式字符串的拼写:

      FormatName:DIRECT=OS:YOURMACHINENAME\private$\YourQueueName
      

      请注意,第一部分FormatName:DIRECT 可能区分大小写。我还没有将它与TCP 一起使用,但我猜无论是否使用了使用的协议,都会区分大小写。

      您可能已经知道 Direct Format Names 的 MSDN 页面,但如果不知道,也值得一读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        • 2018-05-02
        • 2012-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多