使用FormatName发送到远程专用队列时,为什么MessageQueue.Send(Object)不起作用?

时间:2014-10-09 04:26:36

标签: c# msmq system.messaging

所以......这让我感到困惑。

目标队列位于 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 甚至是我的流程运行的帐户分配权限?

感谢帮助!

0 个答案:

没有答案