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 formatname を使用して送信しようとしていると思われますか? MQ Manager はドメイン 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 を正しく取得すると、作業時間を節約できることがわかりました。それぞれのセットアップを理解することは非常に重要です (AD を必要とするパブリックと、リモートでアクセスする場合のプライベートは必要ありません)。これは FormatName の優れた要約です。

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

于 2016-09-17T16:58:22.087 に答える