1

我正在尝试使用 Message 对象将消息发送到队列并收到错误消息

指定的格式名称不支持请求的操作。例如,不能删除直接队列格式名称。

这是代码。

        Order ord = new Order(new Guid(), "Smith & Smith");

        Message orderMessage = new Message(ord);
        orderMessage.UseEncryption = true;
        orderMessage.EncryptionAlgorithm = EncryptionAlgorithm.Rc2;
        orderMessage.Recoverable = true;
        orderMessage.Priority = MessagePriority.VeryHigh;
        orderMessage.TimeToBeReceived = TimeSpan.FromHours(1);
        orderMessage.UseJournalQueue = true;
        orderMessage.Body = "Test Encryption";
        queue.Send(orderMessage, "Encrypted Order");

对此的任何帮助表示赞赏。

汤姆

4

3 回答 3

1

你有没有解决过这个问题?我自己遇到了这个问题,发现我需要使用(就像错误所说)不同的格式名称。

奇怪的是,如果我使用 MQ 证书设置 UseAuthentication 属性,那么它就起作用了。但如果我也想设置 UseEncryption,那就不行了。

您没有指定队列/服务器设置/格式,但我怀疑您正在尝试使用 DIRECT 格式名从一台机器发送到同一域内另一台机器的公共队列?由于 MQ 管理器将使用域 AD 来查找证书和队列详细信息,因此会引发异常,因为格式名称无效(与 AD 中指定的不同)。因此,不要使用直接格式,而是使用队列 ID 来定义格式名称。我切换了这个:

"FormatName:Direct=TCP:111.222.1.22\your_public_queue"

有了这个:

"FormatName:PUBLIC=7EB2A53C-7593-462C-A568-5A0EFA26D91D" 

现在它起作用了。您可以通过右键单击接收机器上的队列找到您的队列 ID,然后转到“属性”->“常规”并查看“ID”字段中指定的值。

于 2013-11-18T13:44:14.003 回答
0

关于这个问题的注意事项,如果您的队列格式名称以这种方式开头:“FormatName:Direct=”,那么您将收到错误“指定的格式名称不支持请求的操作。例如,无法删除直接队列格式名称" 如果您尝试访问队列的 QueueName 属性。请改用队列的 FormatName 属性。

于 2020-08-07T17:26:22.377 回答
0

我发现让 FormatName 正确,无论是公共的还是私有的,都可以节省工作时间。了解每个人的设置非常重要(远程访问时,公共需要 AD 和私人不需要)。这是 FormatName 的一个很好的总结。

https://blogs.msdn.microsoft.com/johnbreakwell/2009/02/26/difference-between-path-name-and-format-name-when-accessing-msmq-queues/

于 2016-09-17T16:58:22.087 回答