次の方法で共有


MessageQueue.ReceiveById メソッド (String, TimeSpan, MessageQueueTransactionType)

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

Overloads Public Function ReceiveById( _
   ByVal id As String, _   ByVal timeout As TimeSpan, _   ByVal transactionType As MessageQueueTransactionType _) As Message
[C#]
public Message ReceiveById(stringid,TimeSpantimeout,MessageQueueTransactionTypetransactionType);
[C++]
public: Message* ReceiveById(String* id,TimeSpantimeout,MessageQueueTransactionTypetransactionType);
[JScript]
public function ReceiveById(
   id : String,timeout : TimeSpan,transactionType : MessageQueueTransactionType) : Message;

パラメータ

  • id
    受信するメッセージの Id
  • timeout
    新しいメッセージを検査できるようになるまでの待機時間を示す TimeSpan
  • transactionType
    メッセージと関連付けるトランザクション コンテキストの種類を示す、 MessageQueueTransactionType 値の 1 つ。

戻り値

渡された id パラメータと一致する Id プロパティを持つ Message

例外

例外の種類 条件
ArgumentNullException id パラメータが null 参照 (Visual Basic では Nothing) です。
ArgumentException timeout パラメータに指定した値が不正です。 timeoutTimeSpan.Zero よりも小さいか、 TimeSpan.MaxValue よりも大きい可能性があります。
MessageQueueException タイムアウトが経過する前に、指定された id を持つメッセージがキューに到達しませんでした。

または

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

InvalidEnumArgumentException transactionType パラメータが、 MessageQueueTransactionType メンバの値ではありません。

解説

このメソッドを使用して、既知の識別子の付いたメッセージを読み取り、キューから削除します。 id パラメータで指定されている ID を持つメッセージがキューにある場合、 transactionType パラメータで定義されたトランザクション コンテキストを使用して、このメソッドからすぐに制御が戻ります。それ以外の場合、メソッドはメッセージが到達するまで、指定した時間待機します。タイムアウトが発生する前にメッセージが到達しないと、例外がスローされます。

既に、メッセージの受信に使用するスレッドに結び付けられた外部トランザクション コンテキストがある場合は、 transactionType パラメータに Automatic を指定します。メッセージを単一の内部トランザクションとして受信する場合は、 Single を指定します。トランザクション コンテキスト外部のトランザクション キューからメッセージを受信する場合は、 None を指定します。

メッセージの Id プロパティは、メッセージ キュー エンタープライズを通じて一意です。そのため、指定された id パラメータと一致するメッセージは、キューに 1 つしか存在しません。指定した ID のメッセージが、この MessageQueue インスタンスに関連付けられていないキューにある場合、メッセージは見つかりません。

キューにメッセージが到達するまで待機する間、現在のスレッドがブロックされてもよい場合は、 ReceiveById のこのオーバーロードを使用します。スレッドは特定の期間、または timeout パラメータの InfiniteTimeout 値を指定した場合は無期限に、ブロックされます。

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

その他の 2 つのメソッドを使用すると、キューからメッセージを受信できます。 Receive メソッドは、キューの最初のメッセージを返します。メッセージがキューに送信されたときに作成された受信確認メッセージ、レポート メッセージ、アプリケーションが生成した応答メッセージを取得するには、 ReceiveByCorrelationId メソッドを使用します。

指定した識別子を持つメッセージをキューから削除せずに読み取るには、 PeekById メソッドを使用します。 PeekById メソッドは、常にキューの最初のメッセージを返します。そのため、より優先順位の高いメッセージがそのキューに到達するまで、後続の呼び出しでも同じメッセージが返されます。 PeekById の呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 PeekById はキューのメッセージを削除しないため、トランザクションが中止されても何もロールバックされません。

このメソッドが各種のワークグループ モードで使用できるかどうかを次の表に示します。

ワークグループ モード 使用可否
ローカル コンピュータ はい
ローカル コンピュータ + 直接書式名 はい
リモート コンピュータ いいえ
リモート コンピュータ + 直接書式名 はい

必要条件

プラットフォーム: 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.ReceiveById オーバーロードの一覧 | MessageQueueTransactionType | Transactional | Receive | ReceiveById | Peek | BeginReceive