1

所以……这个让我很困惑。

目标队列位于MSMQ 在工作组模式下运行的ServerA上。该队列是一个非事务性的私有队列,几乎对世界具有完全权限(包括NETWORK SERVICE,但不包括ANONYMOUS LOGON)。

我这样指定队列地址:FormatName:DIRECT=OS:ServerA\private$\targetqueue

如果我有兴趣发送“即发即弃”式(不需要事务,因为没有其他持久性正在进行),我认为只需调用:

Message message = ConstructMessageWithObjectPayload(serializableObject);
using (MessageQueue queue = new MessageQueue(queueAddress))
{
    queue.Send(message);
} 

但奇怪的是,消息永远不会到达目标队列,并且启用负源日志(有趣的是,这会导致消息被发送到目标服务器上的死信消息队列)告诉我它是“非事务性消息”。

因此,使用

queue.Send(message, MessageQueueTransactionType.Single);

作品!很难解决这个问题。我错过了什么?

此外,我还看到很多其他人的帖子,他们的类似问题通过给予匿名登录完全权限来解决。在什么情况下这是必要的?授予NETWORK SERVICE访问有些意义,因为这是 MSMQ 本身运行的帐户。如果像我一样在工作组模式下运行,是否有必要将权限分配给每个人,甚至是我的进程运行所在的帐户?

感谢帮助!

4

0 回答 0