MSMQ发送消息到远程队列

9

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

我注意到在我的本地机器上,远程队列列在“Outgoing queues”中,但也没有看到消息。我非常无知,所有示例都表明我正在进行的操作(或者我这样认为)是正确的。

代码(简单测试):

    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();
}

我做错了什么?奇怪...没有错误,但是没有看到消息。将工作写入我的本地队列。
1个回答

16

你在本地机器上看到的队列是 MSMQ 用来将消息从你的机器传输到远程机器的方式。只要它上面没有消息,就不需要担心。如果有消息,那就表示由于某种原因远程队列不可用。

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

同时尝试启用 MSMQ 事件日志(如果您正在运行 Server 2008 或以上版本)。

更新

看起来你正在调用公共队列地址。你应该使用私有队列。地址相同,除了 PRIVATE $ 指令:

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

还有:你的队列名称是 myQueueQueue,和你的队列地址一样吗?


谢谢您,正是该队列的发送/接收权限出了问题。非常感谢您。 - scarpacci
抱歉...我以为我做了。对于WCF也应该可以正常工作,对吗?那么如果我正在使用MsmqIntegrationBinding呢? - scarpacci
2
您在事件日志中看不到任何内容,因为那只显示真正的问题 - 对于消息系统而言,丢失消息可以被视为正常现象。 - John Breakwell
1
负面源日志记录是解决此类问题的最佳方法,因为死信队列中的消息可以解释问题的原因。 - John Breakwell
1
在Windows 2008上,我必须为发送/接收设置ANONYMOUS LOGON权限,并且必须添加一个端口3527协议UDP的防火墙入站规则。感谢您的指导。 - Diego
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接