我正在尝试使用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");
对此有任何帮助表示赞赏。
汤姆
答案 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的一个很好的总结。
答案 2 :(得分:0)
有关此问题的一条注释,如果您的队列格式名称以这种方式开始:“ FormatName:Direct =”,则您将收到错误消息“指定的格式名称不支持所请求的操作。例如,直接队列格式名称如果您尝试访问队列的QueueName属性,则无法删除”。请改用队列的FormatName属性。