【发布时间】:2017-12-23 15:01:27
【问题描述】:
我有 3 台机器,我们称它们为 A、B(都是服务器)和 Dev(我的本地机器)。
我想将消息队列项从 A 发送到 B。
我的实际 C# 代码相当简单,老实说,我真的不认为这有问题。 (这是一个 webapi,它接受一个 POST 对象并将其推到队列中)。
我可以毫无问题地将这些消息从 Dev 发送到 B(登录到域管理员帐户时),并且我可以检查消息的正文。但是我无法从 A 向 B 发送消息。B 上的私有队列设置为允许“所有人”的“完全控制”权限。
如果我暂停 A 上的出站队列并发送消息,它们将位于出站队列中,并且正文与我预期的完全一样,但是当我再次恢复该出站队列时,它们永远不会在B 的另一端。
我无法弄清楚我的生活到底发生了什么。我尝试了“TCP”方法,但我需要通过机器名而不是 IP 来引用我的队列。
供参考,用于发送消息的代码是:
using (var queue = new MessageQueue($"FormatName:Direct=OS:MachineB\\private$\\Queue"))
{
var queueItem = new QueueItem();
queueItem.Object = this.postedObject;
var message = new System.Messaging.Message(queueItem);
queue.Send(message);
}
【问题讨论】:
-
A 和 B 是否在同一个域中?另外,B 上的队列是事务性队列还是非事务性队列?
-
@tomredfern 它们都在同一个域中(与 Dev 一起)并且它们是非事务性的 :)
-
在两台服务器上为 MSMQ 开启 E2E 跟踪。 technet.microsoft.com/en-us/library/cc730882(v=ws.11).aspx。这应该可以准确地告诉您发生了什么。
标签: c# message-queue msmq