MSMQ 消息永远不会被传送 - 暂停时坐在出站中
MSMQ Messages Never Get Delivered - Sit in outbound when paused
我有 3 台机器,我们称它们为 A、B(两台服务器)和 Dev(我的本地机器)。
我想将消息队列项从 A 发送到 B。
我的实际 C# 代码相当简单,老实说,我真的不认为这里有问题。 (这是一个 webapi,它接受一个 POSTed 对象并将其推到队列中)。
我可以毫无问题地将这些消息从 Dev 发送到 B(同时登录到域管理员帐户),并且我可以检查消息的正文。但是我无法将消息从 A 发送到 B。B 上的专用队列设置为允许 "Everyone" "Full Control" 权限。
如果我暂停 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);
}
供参考和遇到此问题的任何其他人:
向队列发送消息的项目是一个 webapi。它在 IIS 中的 AppPoolIdentity 帐户下 运行,尽管接收队列允许 Everyone 访问,但它拒绝了这些消息,但很优雅。所以 webapi 会触发消息并且不会抛出任何异常,它会到达出站,但永远不会到达。
我们将帐户切换到 NetworkService,它工作得很好。
我有 3 台机器,我们称它们为 A、B(两台服务器)和 Dev(我的本地机器)。
我想将消息队列项从 A 发送到 B。
我的实际 C# 代码相当简单,老实说,我真的不认为这里有问题。 (这是一个 webapi,它接受一个 POSTed 对象并将其推到队列中)。
我可以毫无问题地将这些消息从 Dev 发送到 B(同时登录到域管理员帐户),并且我可以检查消息的正文。但是我无法将消息从 A 发送到 B。B 上的专用队列设置为允许 "Everyone" "Full Control" 权限。
如果我暂停 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);
}
供参考和遇到此问题的任何其他人:
向队列发送消息的项目是一个 webapi。它在 IIS 中的 AppPoolIdentity 帐户下 运行,尽管接收队列允许 Everyone 访问,但它拒绝了这些消息,但很优雅。所以 webapi 会触发消息并且不会抛出任何异常,它会到达出站,但永远不会到达。
我们将帐户切换到 NetworkService,它工作得很好。