MessageQueue.ReceiveByCorrelationId メソッド (String, TimeSpan, MessageQueueTransactionType)
指定した相関 ID と一致するメッセージを受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトが経過するまで待機します。
Overloads Public Function ReceiveByCorrelationId( _
ByVal correlationId As String, _ ByVal timeout As TimeSpan, _ ByVal transactionType As MessageQueueTransactionType _) As Message
[C#]
public Message ReceiveByCorrelationId(stringcorrelationId,TimeSpantimeout,MessageQueueTransactionTypetransactionType);
[C++]
public: Message* ReceiveByCorrelationId(String* correlationId,TimeSpantimeout,MessageQueueTransactionTypetransactionType);
[JScript]
public function ReceiveByCorrelationId(
correlationId : String,timeout : TimeSpan,transactionType : MessageQueueTransactionType) : Message;
パラメータ
- correlationId
受信するメッセージの CorrelationId 。 - timeout
新しいメッセージを検査できるようになるまでの待機時間を示す TimeSpan 。 - transactionType
メッセージと関連付けるトランザクション コンテキストの種類を示す、 MessageQueueTransactionType 値の 1 つ。
戻り値
渡された correlationId パラメータと一致する CorrelationId を持つ Message 。
例外
例外の種類 | 条件 |
---|---|
ArgumentNullException | correlationId パラメータが null 参照 (Visual Basic では Nothing) です。 |
InvalidOperationException | 指定した correlationId を持つメッセージは見つかりませんでした。 |
ArgumentException | timeout パラメータに指定した値が不正です。 timeout が TimeSpan.Zero よりも小さいか、 TimeSpan.MaxValue よりも大きい可能性があります。 |
InvalidEnumArgumentException | transactionType パラメータが、 MessageQueueTransactionType メンバの値ではありません。 |
MessageQueueException | 指定した correlationId を持つメッセージがキューに存在せず、タイムアウトが発生する前にキューに到達することもありませんでした。
または メッセージ キューの API にアクセスしたときにエラーが発生しました。 |
解説
このメソッドは、 MessageQueue が参照するキューで、 CorrelationId が指定した correlationId パラメータと一致するメッセージを検索します。 correlationId パラメータで指定されている相関 ID のメッセージがキューにある場合、 transactionType パラメータで定義されたトランザクション コンテキストを使用して、このメソッドからすぐに制御が戻ります。それ以外の場合、メソッドはメッセージが到達するまで、指定した時間待機します。タイムアウトが発生する前にメッセージが到達しないと、例外がスローされます。
既に、メッセージの受信に使用するスレッドに結び付けられた外部トランザクション コンテキストがある場合は、 transactionType パラメータに Automatic を指定します。メッセージを単一の内部トランザクションとして受信する場合は、 Single を指定します。トランザクション コンテキスト外部のトランザクション キューからメッセージを受信する場合は、 None を指定します。
このメソッドは、トランザクション キューからメッセージを受信するために呼び出され、トランザクションが中止されると、受信したメッセージがキューに戻されます。メッセージは、トランザクションがコミットされるまで、キューから恒久的に削除されることはありません。
キューに送信したメッセージを、関連付けられている応答、レポート、または受信確認の各メッセージと結び付ける場合は、 CorrelationId プロパティを使用します。
その他の 2 つのメソッドを使用すると、キューからメッセージを受信できます。 Receive メソッドは、キューの最初のメッセージを返します。一意の ID を指定してメッセージを取得するには、 ReceiveById メソッドを使用します。
指定した相関 ID を持つメッセージをキューから削除せずに読み取るには、 PeekByCorrelationId メソッドを使用します。 PeekByCorrelationId メソッドは、常にキューの最初のメッセージを返します。そのため、より優先順位の高いメッセージがそのキューに到達するまで、後続の呼び出しでも同じメッセージが返されます。 PeekByCorrelationId の呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 PeekByCorrelationId はキューのメッセージを削除しないため、トランザクションが中止されても何もロールバックされません。
このメソッドが各種のワークグループ モードで使用できるかどうかを次の表に示します。
ワークグループ モード | 使用可否 |
---|---|
ローカル コンピュータ | はい |
ローカル コンピュータ + 直接書式名 | はい |
リモート コンピュータ | いいえ |
リモート コンピュータ + 直接書式名 | はい |
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- 直前の呼び出し元の完全信頼。このメンバは、部分的に信頼されているコードから使用することはできません。詳細の参照先 : 部分信頼コードからのライブラリの使用
参照
MessageQueue クラス | MessageQueue メンバ | System.Messaging 名前空間 | MessageQueue.ReceiveByCorrelationId オーバーロードの一覧 | MessageQueueTransactionType | Transactional | Receive | ReceiveById | Peek | BeginReceive