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

时间:2013-06-18 16:25:20

标签: system.messaging

我正在尝试使用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");

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

汤姆

3 个答案:

答案 0 :(得分:1)

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

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

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

"FormatName:Direct=TCP:111.222.1.22\your_public_queue"

用这个:

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

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

答案 1 :(得分:0)

我发现将FormatName设置为正确无论是公共还是私有都可以节省数小时的工作量。理解每个设置非常重要(公共要求AD和私有远程访问时不会)。这是FormatName的一个很好的总结。

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

答案 2 :(得分:0)

有关此问题的一条注释,如果您的队列格式名称以这种方式开始:“ FormatName:Direct =”,则您将收到错误消息“指定的格式名称不支持所请求的操作。例如,直接队列格式名称如果您尝试访问队列的QueueName属性,则无法删除”。请改用队列的FormatName属性。