MessageQueue.ReceiveById メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した ID と一致するメッセージを受信し、キューから削除します。
オーバーロード
ReceiveById(String) |
指定した ID と一致するメッセージを非トランザクション キューから受信します。現在、指定した ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。 |
ReceiveById(String, MessageQueueTransaction) |
指定した ID と一致するメッセージを (トランザクション キューから) 受信します。現在、指定した ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。 |
ReceiveById(String, MessageQueueTransactionType) |
指定した ID と一致するメッセージを受信します。現在、指定した ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。 |
ReceiveById(String, TimeSpan) |
指定した ID と一致するメッセージを (非トランザクション キューから) 受信します。指定した ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。 |
ReceiveById(String, TimeSpan, MessageQueueTransaction) |
指定した ID と一致するメッセージを (トランザクション キューから) 受信します。指定した ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。 |
ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
指定した ID と一致するメッセージを受信します。指定した ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。 |
ReceiveById(String)
指定した ID と一致するメッセージを非トランザクション キューから受信します。現在、指定した ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id);
public System.Messaging.Message ReceiveById (string id);
member this.ReceiveById : string -> System.Messaging.Message
Public Function ReceiveById (id As String) As Message
パラメーター
戻り値
渡された id
パラメーターと一致する Id プロパティを持つ Message。
例外
id
パラメーターが null
です。
指定した id
を持つメッセージは見つかりませんでした。
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveById(String) の使用方法を示します。
// Connect to a queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Receive the message from the queue.
msg = queue->ReceiveById(id);
queue->Close();
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Receive the message from the queue.
msg = queue.ReceiveById(id);
注釈
既知の識別子を持つメッセージを読み取り、キューから削除するには、このメソッドを使用します。 メッセージがキューにない場合、このメソッドは例外を直ちにスローします。
メッセージの プロパティは Id 、メッセージ キュー エンタープライズ全体で一意であるため、指定された id
パラメーターに一致するメッセージがキュー内に最大 1 つ存在します。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveByCorrelationId(String) 。メソッドは、キューに送信されたメッセージの結果として作成された受信確認、レポート、またはアプリケーションによって生成された応答メッセージを取得するために使用されます。
指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekById(String) 。 メソッドは PeekById(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveById(String, MessageQueueTransaction)
指定した ID と一致するメッセージを (トランザクション キューから) 受信します。現在、指定した ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message ReceiveById (string id, System.Messaging.MessageQueueTransaction transaction);
member this.ReceiveById : string * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function ReceiveById (id As String, transaction As MessageQueueTransaction) As Message
パラメーター
- transaction
- MessageQueueTransaction
MessageQueueTransaction オブジェクト。
戻り値
渡された id
パラメーターと一致する Id プロパティを持つ Message。
例外
指定した id
を持つメッセージは見つかりませんでした。
例
次のコード例は、ReceiveById(String, MessageQueueTransaction) の使用方法を示します。
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();
try
{
// Begin a transaction.
transaction->Begin();
// Receive the message from the queue.
msg = queue->ReceiveById(id, transaction);
// Commit the transaction.
transaction->Commit();
}
catch (Exception^ ex)
{
// Cancel the transaction.
transaction->Abort();
// Propagate the exception.
throw ex;
}
finally
{
// Dispose of the transaction object.
delete transaction;
queue->Close();
}
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();
try
{
// Begin a transaction.
transaction.Begin();
// Receive the message from the queue.
msg = queue.ReceiveById(id, transaction);
// Commit the transaction.
transaction.Commit();
}
catch(System.Exception e)
{
// Cancel the transaction.
transaction.Abort();
// Propagate the exception.
throw e;
}
finally
{
// Dispose of the transaction object.
transaction.Dispose();
}
注釈
既知の識別子を持つメッセージを読み取り、 パラメーターで定義された内部トランザクション コンテキストを使用してキューから削除するには、このメソッドを transaction
使用します。 メッセージがキューにない場合、このメソッドは例外を直ちにスローします
メッセージの プロパティは Id 、メッセージ キュー エンタープライズ全体で一意であるため、指定された id
パラメーターに一致するメッセージがキュー内に最大 1 つ存在します。
このメソッドはトランザクション キューで呼び出されるため、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveByCorrelationId(String) 。メソッドは、キューに送信されたメッセージの結果として作成された受信確認、レポート、またはアプリケーションによって生成された応答メッセージを取得するために使用されます。
指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekById(String) 。 メソッドは PeekById(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。 への PeekById(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 はキュー内のメッセージを削除しないため PeekById(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveById(String, MessageQueueTransactionType)
指定した ID と一致するメッセージを受信します。現在、指定した ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message ReceiveById (string id, System.Messaging.MessageQueueTransactionType transactionType);
member this.ReceiveById : string * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function ReceiveById (id As String, transactionType As MessageQueueTransactionType) As Message
パラメーター
- transactionType
- MessageQueueTransactionType
メッセージと関連付けるトランザクション コンテキストの種類を示す、MessageQueueTransactionType 値の 1 つ。
戻り値
渡された id
パラメーターと一致する Id プロパティを持つ Message。
例外
id
パラメーターが null
です。
指定した id
を持つメッセージは見つかりませんでした。
transactionType
パラメーターが、MessageQueueTransactionType メンバーの 1 つではありません。
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveById(String, MessageQueueTransactionType) の使用方法を示します。
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Receive the message from the queue.
msg = queue->ReceiveById(id, MessageQueueTransactionType::Single);
queue->Close();
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Receive the message from the queue.
msg = queue.ReceiveById(id, MessageQueueTransactionType.Single);
注釈
既知の識別子を持つメッセージを読み取り、キューから削除するには、このメソッドを使用します。 メッセージがキューにない場合、このメソッドは例外を直ちにスローします。 それ以外の場合、メッセージはキューから削除され、 パラメーターで定義されたトランザクション コンテキストを使用してアプリケーションに transactionType
返されます。
メッセージの受信に使用するtransactionType
外部トランザクション コンテキストがスレッドに既にアタッチされている場合は、 パラメーターに を指定Automatic
します。 メッセージを 1 つの内部トランザクションとして受信するかどうかを指定 Single
します。 トランザクション コンテキスト以外のトランザクション キューからメッセージを受信するかどうかを指定 None
できます。
メッセージの プロパティは Id 、メッセージ キュー エンタープライズ全体で一意であるため、指定された id
パラメーターに一致するメッセージがキュー内に最大 1 つ存在します。 指定した識別子を持つメッセージがこのインスタンスに関連付 MessageQueue けられているキュー以外のキューにある場合、メッセージは見つかりません。
トランザクション キューからメッセージを受信するためにこのメソッドが呼び出された場合、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveByCorrelationId(String) 。メソッドは、キューに送信されたメッセージの結果として作成された受信確認、レポート、またはアプリケーションによって生成された応答メッセージを取得するために使用されます。
指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekById(String) 。 メソッドは PeekById(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。 への PeekById(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 はキュー内のメッセージを削除しないため PeekById(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveById(String, TimeSpan)
指定した ID と一致するメッセージを (非トランザクション キューから) 受信します。指定した ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, TimeSpan timeout);
public System.Messaging.Message ReceiveById (string id, TimeSpan timeout);
member this.ReceiveById : string * TimeSpan -> System.Messaging.Message
Public Function ReceiveById (id As String, timeout As TimeSpan) As Message
パラメーター
戻り値
渡された id
パラメーターと一致する Id プロパティを持つ Message。
例外
id
パラメーターが null
です。
timeout
パラメーターに指定した値が無効です。timeout
が Zero よりも小さいか、InfiniteTimeout よりも大きい可能性があります。
タイムアウトが経過する前に、指定された id
を持つメッセージがキューに到達しませんでした。
- または -
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveById(String, TimeSpan) の使用方法を示します。
// Connect to a queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0));
queue->Close();
// Connect to a queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));
注釈
既知の識別子を持つメッセージを読み取り、キューから削除するには、このメソッドを使用します。 パラメーターで id
指定された識別子を持つメッセージがキュー内にある場合、このメソッドは直ちにを返します。 それ以外の場合、メソッドは、新しいメッセージが到着するまで、指定された期間を待機します。 タイムアウトが切れる前に新しいメッセージが到着しない場合は、例外がスローされます。
パラメーターは timeout
、このメソッドの合計実行時間を指定しません。 代わりに、新しいメッセージがキューに到着するまでの時間を指定します。 新しいメッセージが到着するたびに、このメソッドは新しいメッセージの を Id 調べて、 パラメーターと一致 id
するかどうかを確認します。 そうでない場合、このメソッドはタイムアウト期間を開始し、別の新しいメッセージが到着するまで待機します。 そのため、タイムアウト期間内に新しいメッセージが引き続き到着する場合は、タイムアウト期間が切れるまで、またはパラメーターに一致id
するメッセージがId到着するまで、このメソッドを無期限に実行し続けることができます。
メッセージの プロパティは Id 、メッセージ キュー エンタープライズ全体で一意であるため、指定された id
パラメーターに一致するメッセージがキュー内に最大 1 つ存在します。
パラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける限り、現在のスレッドをブロックできる場合は、 のこのオーバーロード ReceiveById(String) を timeout
使用します。 スレッドは、少なくとも指定された期間、または パラメーターの値InfiniteTimeouttimeout
を指定した場合、またはパラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける場合は無期限にtimeout
ブロックされます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveByCorrelationId(String) 。メソッドは、キューに送信されたメッセージの結果として作成された受信確認、レポート、またはアプリケーションによって生成された応答メッセージを取得するために使用されます。
指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekById(String) 。 メソッドは PeekById(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveById(String, TimeSpan, MessageQueueTransaction)
指定した ID と一致するメッセージを (トランザクション キューから) 受信します。指定した ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, TimeSpan timeout, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message ReceiveById (string id, TimeSpan timeout, System.Messaging.MessageQueueTransaction transaction);
member this.ReceiveById : string * TimeSpan * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function ReceiveById (id As String, timeout As TimeSpan, transaction As MessageQueueTransaction) As Message
パラメーター
- transaction
- MessageQueueTransaction
MessageQueueTransaction オブジェクト。
戻り値
渡された id
パラメーターと一致する Id プロパティを持つ Message。
例外
timeout
パラメーターに指定した値が無効です。timeout
が Zero よりも小さいか、InfiniteTimeout よりも大きい可能性があります。
タイムアウトが経過する前に、指定された id
を持つメッセージがキューに到達しませんでした。
- または -
キューが非トランザクション キューです。
- または -
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveById(String, TimeSpan, MessageQueueTransaction) の使用方法を示します。
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();
try
{
// Begin a transaction.
transaction->Begin();
// Receive the message from the queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0),
transaction);
// Commit the transaction.
transaction->Commit();
}
catch (Exception^ ex)
{
// Cancel the transaction.
transaction->Abort();
// Propagate the exception.
throw ex;
}
finally
{
// Dispose of the transaction object.
delete transaction;
queue->Close();
}
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();
try
{
// Begin a transaction.
transaction.Begin();
// Receive the message from the queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0),
transaction);
// Commit the transaction.
transaction.Commit();
}
catch(System.Exception e)
{
// Cancel the transaction.
transaction.Abort();
// Propagate the exception.
throw e;
}
finally
{
// Dispose of the transaction object.
transaction.Dispose();
}
注釈
既知の識別子を持つメッセージを読み取り、 パラメーターで定義された内部トランザクション コンテキストを使用してキューから削除するには、このメソッドを transaction
使用します。 パラメーターで id
指定された識別子を持つメッセージがキュー内にある場合、このメソッドは直ちにを返します。 それ以外の場合、メソッドは、新しいメッセージが到着するまで、指定された期間を待機します。 タイムアウトが切れる前に新しいメッセージが到着しない場合は、例外がスローされます。
パラメーターは timeout
、このメソッドの合計実行時間を指定しません。 代わりに、新しいメッセージがキューに到着するまでの時間を指定します。 新しいメッセージが到着するたびに、このメソッドは新しいメッセージの を Id 調べて、 パラメーターと一致 id
するかどうかを確認します。 そうでない場合、このメソッドはタイムアウト期間を開始し、別の新しいメッセージが到着するまで待機します。 そのため、タイムアウト期間内に新しいメッセージが引き続き到着する場合は、タイムアウト期間が切れるまで、またはパラメーターに一致id
するメッセージがId到着するまで、このメソッドを無期限に実行し続けることができます。
メッセージの プロパティは Id 、メッセージ キュー エンタープライズ全体で一意であるため、指定された id
パラメーターに一致するメッセージがキュー内に最大 1 つ存在します。
パラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける限り、現在のスレッドをブロックできる場合は、 のこのオーバーロード ReceiveById(String) を timeout
使用します。 スレッドは、少なくとも指定された期間、または パラメーターの値InfiniteTimeouttimeout
を指定した場合、またはパラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける場合は無期限にtimeout
ブロックされます。
このメソッドはトランザクション キューで呼び出されるため、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveByCorrelationId(String) 。メソッドは、キューに送信されたメッセージの結果として作成された受信確認、レポート、またはアプリケーションによって生成された応答メッセージを取得するために使用されます。
指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekById(String) 。 メソッドは PeekById(String) 常にキュー内の最初のメッセージを返します。そのため、優先順位の高いメッセージがキューに到着しない限り、メソッドの後続の呼び出しでは同じメッセージが返されます。 への PeekById(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 はキュー内のメッセージを削除しないため PeekById(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
指定した ID と一致するメッセージを受信します。指定した ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。
public:
System::Messaging::Message ^ ReceiveById(System::String ^ id, TimeSpan timeout, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message ReceiveById (string id, TimeSpan timeout, System.Messaging.MessageQueueTransactionType transactionType);
member this.ReceiveById : string * TimeSpan * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function ReceiveById (id As String, timeout As TimeSpan, transactionType As MessageQueueTransactionType) As Message
パラメーター
- transactionType
- MessageQueueTransactionType
メッセージと関連付けるトランザクション コンテキストの種類を示す、MessageQueueTransactionType 値の 1 つ。
戻り値
渡された id
パラメーターと一致する Id プロパティを持つ Message。
例外
id
パラメーターが null
です。
timeout
パラメーターに指定した値が無効です。timeout
が Zero よりも小さいか、InfiniteTimeout よりも大きい可能性があります。
タイムアウトが経過する前に、指定された id
を持つメッセージがキューに到達しませんでした。
- または -
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
transactionType
パラメーターが、MessageQueueTransactionType メンバーの 1 つではありません。
例
次のコード例は、ReceiveById(String, TimeSpan, MessageQueueTransactionType) の使用方法を示します。
// Connect to a transactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message.
queue->Send(msg, "Example Message Label",
MessageQueueTransactionType::Single);
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0),
MessageQueueTransactionType::Single);
queue->Close();
// Connect to a transactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleTransQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message.
queue.Send(msg, "Example Message Label",
MessageQueueTransactionType.Single);
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0),
MessageQueueTransactionType.Single);
注釈
既知の識別子を持つメッセージを読み取り、キューから削除するには、このメソッドを使用します。 パラメーターで指定された識別子を持つメッセージが、 パラメーターで id
定義されたトランザクション コンテキストを使用してキュー内にある場合、このメソッドは直ちにを transactionType
返します。 それ以外の場合、メソッドは、指定された期間に新しいメッセージが到着するまで待機します。 タイムアウトが切れる前に新しいメッセージが到着しない場合は、例外がスローされます。
パラメーターでは timeout
、このメソッドの合計実行時間は指定されません。 代わりに、新しいメッセージがキューに到着するまでの時間を指定します。 新しいメッセージが到着するたびに、このメソッドは新しいメッセージの を Id 調べて、 パラメーターと一致 id
するかどうかを確認します。 そうでない場合、このメソッドはタイムアウト期間を開始し、別の新しいメッセージが到着するまで待機します。 したがって、タイムアウト期間内に新しいメッセージが到着し続ける場合、このメソッドは、新しいメッセージが到着せずにタイムアウト期間が切れるまで、またはパラメーターに一致id
するIdメッセージが到着するまで、無期限に実行を続けることができます。
メッセージの受信に使用するtransactionType
スレッドに外部トランザクション コンテキストが既にアタッチされている場合は、 パラメーターに を指定Automatic
します。 メッセージを 1 つの内部トランザクションとして受信するかどうかを指定 Single
します。 トランザクション コンテキストの外部のトランザクション キューからメッセージを受信するかどうかを指定 None
できます。
メッセージの プロパティは Id 、メッセージ キュー エンタープライズ全体で一意であるため、指定されたパラメーターに一致 id
するメッセージがキュー内に最大 1 つ存在します。 指定した識別子を持つメッセージがこのインスタンスに関連付 MessageQueue けられているキュー以外のキューにある場合、メッセージは見つかりません。
パラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける限り、現在のスレッドをブロックできる場合は、 のこのオーバーロード ReceiveById(String) を timeout
使用します。 スレッドは、少なくとも指定された期間、またはパラメーターの値InfiniteTimeouttimeout
を指定した場合、またはパラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける場合は無期限にtimeout
ブロックされます。
トランザクション キューからメッセージを受信するためにこのメソッドが呼び出された場合、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveByCorrelationId(String) 。このメソッドは、キューに送信されたメッセージの結果として作成された受信確認、レポート、またはアプリケーションによって生成された応答メッセージを取得するために使用されます。
指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを PeekById(String) 使用します。 メソッドは PeekById(String) 常にキュー内の最初のメッセージを返すので、優先順位の高いメッセージがキューに到着しない限り、メソッドの後続の呼び出しでは同じメッセージが返されます。 への PeekById(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 キュー内のメッセージは削除されないため PeekById(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接形式の名前 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
.NET