次の方法で共有


MessageQueue.ReceiveByCorrelationId メソッド (String, TimeSpan, MessageQueueTransaction)

指定した相関 ID と一致するメッセージをトランザクション キューから受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトが経過するまで待機します。

Overloads Public Function ReceiveByCorrelationId( _
   ByVal correlationId As String, _   ByVal timeout As TimeSpan, _   ByVal transaction As MessageQueueTransaction _) As Message
[C#]
public Message ReceiveByCorrelationId(stringcorrelationId,TimeSpantimeout,MessageQueueTransactiontransaction);
[C++]
public: Message* ReceiveByCorrelationId(String* correlationId,TimeSpantimeout,MessageQueueTransaction* transaction);
[JScript]
public function ReceiveByCorrelationId(
   correlationId : String,timeout : TimeSpan,transaction : MessageQueueTransaction) : Message;

パラメータ

  • correlationId
    受信するメッセージの CorrelationId
  • timeout
    新しいメッセージを検査できるようになるまでの待機時間を示す TimeSpan
  • transaction
    MessageQueueTransaction オブジェクト。

戻り値

渡された correlationId パラメータと一致する CorrelationId を持つ Message

例外

例外の種類 条件
ArgumentNullException correlationId パラメータが null 参照 (Visual Basic では Nothing) です。

または

transaction パラメータが null 参照 (Nothing) です。

ArgumentException timeout パラメータに指定した値が不正です。 timeoutTimeSpan.Zero よりも小さいか、 TimeSpan.MaxValue よりも大きい可能性があります。
MessageQueueException 指定した correlationId を持つメッセージがキューに存在せず、タイムアウトが発生する前にキューに到達することもありませんでした。

または

キューが非トランザクション キューです。

または

メッセージ キューの API にアクセスしたときにエラーが発生しました。

解説

このメソッドは、 MessageQueue が参照するトランザクション キューで、 CorrelationId が指定した correlationId パラメータと一致するメッセージを検索します。 correlationId パラメータで指定されている相関 ID のメッセージがキューにある場合、 transaction パラメータで定義された内部トランザクション コンテキストを使用して、このメソッドからすぐに制御が戻ります。それ以外の場合、メソッドはメッセージが到達するまで、指定した時間待機します。タイムアウトが発生する前にメッセージが到達しないと、例外がスローされます。

このメソッドはトランザクション キューで呼び出されるため、トランザクションが中止されると、受信したメッセージがキューに戻されます。メッセージは、トランザクションがコミットされるまで、キューから恒久的に削除されることはありません。

キューに送信したメッセージを、関連付けられている応答、レポート、または受信確認の各メッセージと結び付ける場合は、 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 オーバーロードの一覧 | MessageQueueTransaction | Transactional | InfiniteTimeout | Receive | ReceiveById | Peek | BeginReceive