C# 以静默方式发送到远程MSMQ失败

C# 以静默方式发送到远程MSMQ失败,c#,msmq,message-queue,C#,Msmq,Message Queue,我正在尝试向C#中的远程消息队列发送消息 这是我正在使用的路径: FormatName:Direct=TCP:192.168.0.10\private$\test_in .Send方法被毫无例外地传递,但远程队列中未显示任何消息。奇怪的是,我可以毫无问题地从同一个队列接收消息 远程计算机上的队列是非事务性的,本地计算机上的代码也是非事务性的。它还拥有“所有人”的“完全访问权” 我读过一些对有类似问题的人的回应,但似乎没有一个解决方案适用于我。我已经检查了本地机器上的Outgoing Queue

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

这是我正在使用的路径:

FormatName:Direct=TCP:192.168.0.10\private$\test_in
.Send方法被毫无例外地传递,但远程队列中未显示任何消息。奇怪的是,我可以毫无问题地从同一个队列接收消息

远程计算机上的队列是非事务性的,本地计算机上的代码也是非事务性的。它还拥有“所有人”的“完全访问权”

我读过一些对有类似问题的人的回应,但似乎没有一个解决方案适用于我。我已经检查了本地机器上的Outgoing Queues部分,它们都显示为“已连接”到远程队列,但也表示没有发送任何消息。看起来它甚至都没试过

你知道我的问题是什么吗?谢谢

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


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

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

所以问题在于接收机器上的某些东西。可能是队列权限。这些计算机在不同的windows域中吗


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

hugh的回答让我找到了实际原因。我需要添加匿名登录远程队列的权限(“每个人”都不够)。希望这对其他人有所帮助。

检查格式字符串的拼写:

FormatName:DIRECT=OS:YOURMACHINENAME\private$\YourQueueName
请注意,第一部分
FormatName:DIRECT
可能区分大小写。我还没有将它与
TCP
一起使用,但我猜不管使用何种协议,区分大小写都适用


您可能已经知道了的MSDN页面,但如果不知道,还值得一读。

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


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

我收到了“通过网络接收的消息”消息,但没有其他消息。谢天谢地,这让我搜索了这条消息,我找到了真正的原因,所以谢谢你的线索!我想添加关于匿名登录的信息,因此我询问了不同的域。DamnHow启用msmq事件日志?@Kiquenet打开日志后,我认为右侧有一个“启用”按钮。对我来说,远程日志中也没有显示任何内容。在本地日志中,它显示匿名登录在我的情况下不是解决方案,但让“每个人”完全控制才是诀窍@这是因为你的发送者和你的接收者在同一个广告域。那么,如果你不尝试100种不同的方法直到成功,你怎么能得出这样的结论呢?没有日志可以让你看到哪里出了问题吗?