2

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

这是我正在使用的路径:

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

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

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

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

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

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

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

4

4 回答 4

5

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

于 2013-09-25T08:35:01.227 回答
3

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

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

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

于 2013-09-25T08:04:51.363 回答
1

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

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

于 2015-05-29T21:32:07.787 回答
0

检查格式字符串的拼写:

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

请注意,第一部分FormatName:DIRECT可能区分大小写。我还没有使用它TCP,但我猜不管使用的协议是否都适用区分大小写。

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

于 2013-09-25T08:35:47.473 回答