キューの参照に関する推奨事項
更新 : 2007 年 11 月
MessageQueue コンポーネントのインスタンスを作成する場合、コンポーネントがやり取りするキューを指定する必要があります。コードでキューを参照するには、次の 3 つの方法があります。
パスによる参照。キューへのパスは、そのキューのコンピュータ名およびキュー名を一意に識別します。
形式名による参照。キューの一意な識別子であり、キューの作成時に MSMQ によって生成されるか、または後でアプリケーションによって生成されます。
ラベルによる参照。キューの作成時にキュー管理者によって割り当てられるキューの説明的な名前であり、一意であるとは限りません。
MessageQueue コンポーネントの新しいインスタンスを作成せずに、新しいキューを作成するには、パスを使用する必要があります。形式名とラベルは、キューの作成後にメッセージ キュー システムによって割り当てられます。ただし、コードまたは [ツールボックス] で既存のキューを参照する場合は、参照方法を選択できます。選択した方法は、コンポーネントの Path プロパティに格納されます。
パスによるキューの参照
キューへのパスは servername\queuename という形式になります。キューへのパスは、常に一意です。各種のキューに対して使用されるパス情報を次の表に示します。
キューの種類 |
パスの構文 |
---|---|
パブリック キュー |
<コンピュータ名>\QueueName |
プライベート キュー |
<コンピュータ名>\Private$\QueueName |
ジャーナル キュー |
<コンピュータ名>\QueueName\Journal$ |
コンピュータのジャーナル キュー |
<コンピュータ名>\Journal$ |
コンピュータの配信不能キュー |
<コンピュータ名>\Deadletter$ |
コンピュータのトランザクション配信不能キュー |
<コンピュータ名>\XactDeadletter$ |
"." はローカル コンピュータ名を表します。したがって、"YourMachine\MyQueue" は ".\MyQueue" に相当します。
パスを使用してキューを参照する場合の注意事項をいくつか示します。
メッセージ キュー サーバー上のドメイン コントローラが、パスによって参照されているキューに対する操作を受信した場合、ドメイン コントローラはパスを解決して目的のキューの形式名を決定する必要があります。その結果、キューを直接形式名で参照した場合に比べて、パフォーマンスがやや遅くなります。
使用するコンポーネントを XML Web サービスとしてデザインする場合は、パスではなく形式名を使用してキューを参照することで最適なパフォーマンスが得られます。
キューが接続されていないときにメッセージを送信する場合は、キューをパスで参照することはできません。非接続型メッセージは、形式名を使用して送信する必要があります。
キューへのパスは、MessageQueue 基本クラスの 2 つの異なるプロパティ、MachineName プロパティと QueueName プロパティを照会し、その結果を組み合わせることによって取得できます。
コードでパスによってキューを参照するための構文は、次のようになります。
MessageQueue1.Path = "YourMachine\MyQueue"
MessageQueue1.Path = @"YourMachine\MyQueue";
メモ : |
---|
C# では、@".\MyQueue" 構文の代わりに、".\\MyQueue" を使用しても同じ結果が得られます。@ 記号はリテラル文字列を示します。詳細については、「string (C# リファレンス)」を参照してください。 |
形式名によるキューの参照
形式名の形式は、キューがパブリックかプライベートかを示す文字列から始まり、キューに対して生成された GUID、および必要に応じてその他の識別子が続きます。各種のキューに対して使用されるパス情報を次の表に示します。
キューの種類 |
形式名の構文 |
---|---|
パブリック キュー |
FORMATNAME:PUBLIC=QueueGUID |
プライベート キュー |
FORMATNAME:PRIVATE=MachineGUID\QueueNumber |
ジャーナル キュー |
FORMATNAME:PUBLIC=QueueGUID;JOURNAL または FORMATNAME:PRIVATE=MachineGUID\QueueNumber;JOURNAL |
形式名は、自分でキューに割り当てるのではなく、キューの作成時にキュー マネージャによって生成されます。形式名によるキューの参照は、キューをパスで参照するときと違ってサーバー上のドメイン コントローラが参照を解釈する必要がないため、キューにアクセスする最も直接的な方法です。
形式名によってキューを参照する場合のヒントをいくつか示します。
キューがオフラインのときにはパスを解決できないため、非接続型キューに対してメッセージを送信する場合は、パスではなく形式名でキューを参照する必要があります。
ネットワークのトポロジーが変更された場合や、キューが削除されて再作成された場合には、形式名が無効になることもあります。
MessageQueue クラスの FormatName プロパティを照会することにより、キューの形式名を取得できます。
コードで形式名によってキューを参照するための構文は、次のようになります。
MessageQueue1.Path = _
"FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75"
MessageQueue1.Path =
"FORMATNAME:PUBLIC=3d3dc813-c555-4fd3-8ce0-79d5b45e0d75";
ラベルによるキューの参照
管理者によってキューに与えられる説明的なテキスト ラベルを使用して、キューを参照することもできます。ラベルは一意であるとは限らないため、ラベルを使用して特定のキューに接続しようとしたときに名前の競合があると、エラーが返されます。
ラベルは、キューをコンピュータ間で移動する場合に便利です。キューをラベルだけで参照している場合は、キューを新しい場所に移動した後でも、新しいコンピュータ上に同じラベルのキューがほかに存在しない限り、すべての操作が引き続き正しく機能します。同じラベルのキューが存在する場合、Send メソッドはエラーを返します。
MessageQueue クラスの Label プロパティを照会することにより、キューのラベルを取得できます。
コードでラベル名によってキューを参照するための構文は、次のようになります。
MessageQueue1.Path = "LABEL:MyQueue"
MessageQueue1.Path = "LABEL:MyQueue";
詳細については方法 : キュー参照を設定する および方法 : キュー参照を設定する および方法 : キュー参照の設定.
参照
処理手順
方法 : MessageQueue コンポーネントのインスタンスを作成する