我正在尝试将消息发送到C#中的远程消息队列。
这是我正在使用的路径:
FormatName:Direct=TCP:192.168.0.10\private$\test_in
.Send方法无异常传递,但远程队列中不显示任何消息。奇怪的是,我可以毫无问题地从同一队列接收。
远程计算机上的队列是非事务性的,本地计算机上的代码也是如此。它还具有“完全访问”“每个人”。
我已经阅读了一些针对有类似问题的人的回复,但这些解决方案似乎都不适用于我。我已经检查了本地计算机上的“传出队列”部分,它们都显示为“已连接”到远程队列,但也表示没有消息已发送。它看起来似乎没有尝试过。
任何想法我的问题可能是什么?感谢。
编辑:更多信息 - 本地计算机是Windows 8.远程计算机是Windows Server 2012。
编辑:休的回答让我了解了真正的原因。我需要将ANONYMOUS LOGON的权限添加到远程队列('Everyone'是不够的)。希望这有助于某人。答案 0 :(得分:3)
在发送计算机上创建了传出队列,并且此队列没有消息,这意味着该消息已传输到接收计算机。
因此问题将出现在接收机器上。可能是队列权限。机器是否在不同的Windows域中?
如果您启用了msmq事件日志(事件查看器 - >应用和服务日志 - > Microsoft - > Windows - > MSMQ),您应该能够确切地看到邮件到达后会发生什么。
答案 1 :(得分:3)
答案 2 :(得分:1)
在我的情况下,消息也没有显示在远程专用队列中。我在这里查看了其中一个答案,并将“Everyone”完全控制权交给了私有队列,然后消息开始填充队列。 然而,稍微改进一下,我确定“每个人”都不适合我的情况。 我的目标是让生产服务器将消息写入开发服务器。因此,最后我需要做的是将服务器/工作站名称添加到此安全列表中,仅使用“发送”权限。
单击“添加”按钮,在Active Directory计算机对象类型列表中找到您的服务器/工作站名称。
答案 3 :(得分:0)
检查格式字符串的拼写:
FormatName:DIRECT=OS:YOURMACHINENAME\private$\YourQueueName
请注意,第一部分FormatName:DIRECT
可能区分大小写。我还没有将它用于TCP
,但我认为无论使用的协议如何,区分大小写都适用。
您可能已经知道Direct Format Names的MSDN页面,但如果没有,则可能值得一读。