MessageQueue.Receive メソッド (TimeSpan, MessageQueueTransactionType)

MessageQueue で参照されるキューで利用できる最初のメッセージを受信します。この呼び出しは同期的に実行され、メッセージがキューで使用できるようになるか、タイムアウトが経過するまで待機します。

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

パラメータ

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

戻り値

キューで利用できる最初のメッセージを参照する Message

例外

例外の種類 条件
ArgumentException timeout パラメータに指定した値が不正です。 timeoutTimeSpan.Zero よりも小さいか、 TimeSpan.MaxValue よりも大きい可能性があります。
InvalidEnumArgumentException transactionType パラメータが、 MessageQueueTransactionType メンバの値ではありません。
MessageQueueException タイムアウトが経過する前に、キューにメッセージが到達しませんでした。

または

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

解説

このオーバーロードを使用すると、 transactionType パラメータで定義されたトランザクション コンテキストを使用してキューからメッセージを受信し、キューにメッセージがない場合は、指定された時間内に戻ります。

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

Receive メソッドを使用すると、メッセージを同期的に読み取ることができるため、キューから削除できます。後続の Receive 呼び出しは、キューにある次のメッセージを返します。

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

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

メッセージのキューへの到達を待機している間に、現在のスレッドがブロックされてもいい場合は、 Receive を呼び出します。スレッドは特定の期間、または timeout パラメータの InfiniteTimeout 値を指定した場合は無期限に、ブロックされます。メッセージを待機せずにアプリケーションの処理を継続する必要がある場合は、非同期メソッド BeginReceive を使用します。

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

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

必要条件

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