2013-09-24 61 views
1

我试图发送消息到C#中的远程消息队列。发送到远程MSMQ静默失败

这是我使用的路径:

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

的方法。发送无一例外被传递,但出现在远程队列中没有消息。奇怪的是,我可以从同一个队列中收到问题。

在远程机器上的队列是非事务,这是我的本地机器上的代码。它也具有'全面访问'给'每个人'。

我读了一些反应,有类似问题的人,但没有一个解决方案,似乎适用于我。我检查了本地计算机上的“传出队列”部分,它们都显示为“连接”到远程队列,但也表示没有消息已发送。它看起来还没有尝试过。

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

编辑:多一点信息 - 本地计算机是Windows 8的远程机器的Windows Server 2012的

编辑:休的回答使我真正的原因。我需要将ANONYMOUS LOGON的权限添加到远程队列(“每个人”都不够)。希望这可以帮助某人。

回答

2

该传出队列已被发送机器上创建的,并且该队列不具有消息,这一事实意味着该消息已被发送到接收机。

所以问题会在接收计算机上的东西。可能是队列权限。这些机器是否在不同的Windows域中?

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

+0

我正在收到'通过网络收到消息'的消息,但没有别的。幸运的是,这导致我寻找这个消息,我发现了真正的原因,所以谢谢你的线索! – Barguast

+0

我的意思是添加关于匿名登录,因此我询问不同的域名。该死的 –

+0

如何启用msmq事件日志? – Kiquenet

2

休的回答让我明白了原因。我需要将ANONYMOUS LOGON的权限添加到远程队列(“每个人”都不够)。希望这可以帮助某人。

+0

匿名登录不是我的情况下的解决方案,但给予“每个人”完全控制是个诀窍! – Brien

+0

@BrienFoss是因为你的发件人和你的收件人在同一个AD域。 –

+0

那么如何才能真正得出结论:这就是发生了什么事情,而不是只尝试100种不同的东西,直到它发挥作用?没有日志可以看到哪里出了问题? – flodin

0

检查您的格式字符串的拼写:

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

请注意,第一部分FormatName:DIRECT可能是区分大小写的。我还没有使用TCP,但我认为无论使用的协议如何,区分大小写都适用。

你可能已经知道了Direct Format Names MSDN的页面,但如果没有,它也可能是值得一读。

1

在我的情况,邮件已经没有出现在远程专用队列无论是。我在这里看了一个答案,并将'Everyone'全部控制权交给了专用队列,然后消息开始填充队列。 然而,稍微改进一点,我确定'每个人'都不适合我的情况。 我的目标是让生产服务器将消息写入开发服务器。所以最后我需要做的只是使用“发送”权限将服务器/工作站名称添加到此安全列表。

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