所以......这让我感到困惑。
目标队列位于 ServerA 上,其中MSMQ在工作组模式下运行。该队列是一个非事务性的私有队列,几乎全世界都拥有完全权限(包括 NETWORK SERVICE ,但排除 ANONYMOUS LOGON )
我指定队列地址: FormatName:DIRECT = OS:ServerA \ private $ \ targetqueue 。
如果我有兴趣发送"即发即忘" -style(不需要交易,因为没有其他持久性进行),我认为只需简单拨打:
Message message = ConstructMessageWithObjectPayload(serializableObject);
using (MessageQueue queue = new MessageQueue(queueAddress))
{
queue.Send(message);
}
但奇怪的是,消息永远不会到达目标队列并启用负源日记(这有趣的是导致消息被发送到目标服务器上的死信消息队列)告诉我它是&#34 ;非交易消息"。
因此,使用
queue.Send(message, MessageQueueTransactionType.Single);
作品!我很难把头包裹起来。我错过了什么?
此外,我已经看到其他人发布过很多帖子,他们通过提供 ANONYMOUS LOGIN 完整版权解决了类似的问题。在什么情况下这是必要的?提供 NETWORK SERVICE 访问在某种程度上是有意义的,因为这是MSMQ本身运行的帐户。如果像我一样在工作组模式下运行,是否有必要为 Everyone 甚至是我的流程运行的帐户分配权限?
感谢帮助!