【问题标题】:MSMQ Send message to Remote QueueMSMQ 发送消息到远程队列
【发布时间】:2012-02-12 14:20:53
【问题描述】:

我正在尝试向远程队列发送消息。我的进程没有失败,但我仍然看不到远程队列上的消息?如果它无法处理消息,我会假设它会失败?

我确实注意到在我的本地计算机上,远程队列列在传出队列中,但在那里也看不到消息。这里非常无知,所有例子都表明我的做法(或者我认为)是正确的。

代码(简单测试):

    using (var transaction = new TransactionScope())
    {
        using (var queue = new MessageQueue(@"FormatName:DIRECT=OS:mymachine\MyQueueQueue"))
        {
            XDocument xdoc = XDocument.Parse("<root/>");

                 var message = new Message(xdoc.ToString());
                queue.Send(message, MessageQueueTransactionType.Single);
        }

        transaction.Complete();
    }

    Console.Read();
}

我做错了什么?奇怪...没有错误,但在任何地方都看不到消息。将作品写入我的本地队列。

【问题讨论】:

    标签: c# msmq


    【解决方案1】:

    您在本地计算机上看到的队列是 MSMQ 将消息从您的计算机传输到远程计算机的方式。所以只要上面没有消息就不用担心。如果上面有消息表明远程队列由于某种原因不可用。

    可能的权限可能是个问题。检查远程队列的发送权限。如果呼叫是跨域的,您需要将 ANONYMOUS LOGON 添加到您的权限中。

    同时尝试启用 MSMQ 事件日志(如果您运行的是服务器 2008 或更高版本)。

    更新

    您似乎正在调用公共队列地址。您应该使用私有队列。除了 PRIVATE$ 指令之外,地址是相同的:

    FormatName:DIRECT=OS:mymachine\PRIVATE$\MyQueueQueue

    ALSO:您的队列名称 myQueueQueue 是否与您的队列地址中的一样?

    【讨论】:

    • 谢谢@hugh....查看了事件日志...到目前为止什么也没看到。将查看权限
    • 谢谢你是那个队列上的发送/接收权限!非常感谢。
    • 您不会在事件日志中看到任何内容,因为这只会显示真正的问题 - 对于消息传递系统,丢失消息可以视为正常。
    • 负源日志是解决此类问题的最佳方法,因为死信队列中的消息解释了问题的原因。
    • 在 windows 2008 上,我必须将权限设置为匿名登录以进行发送/接收,并且我必须在端口 3527 协议 UDP 上添加防火墙进入规则。感谢您的指导
    猜你喜欢
    • 2012-05-20
    • 2012-07-25
    • 2017-04-27
    • 1970-01-01
    • 2014-07-29
    • 2015-01-20
    • 2012-06-05
    • 2011-04-16
    • 2018-02-02
    相关资源
    最近更新 更多