Language

MessageQueue.ReceiveById メソッド

定義

特定の識別子と一致するメッセージを受信し、キューから削除します。

オーバーロード

名前 説明
ReceiveById(String)

指定された識別子と一致するメッセージを非トランザクション キューから受信し、指定した識別子を持つメッセージがキューに現在存在しない場合は、すぐに例外を発生させます。

ReceiveById(String, MessageQueueTransaction)

指定された識別子と一致するメッセージを (トランザクション キューから) 受信し、指定した識別子を持つメッセージが現在キューに存在しない場合は、すぐに例外を発生させます。

ReceiveById(String, MessageQueueTransactionType)

指定された識別子と一致するメッセージを受信し、指定した識別子を持つメッセージが現在キューに存在しない場合は、すぐに例外を発生させます。

ReceiveById(String, TimeSpan)

指定された識別子と一致するメッセージを (非トランザクション キューから) 受信し、指定した識別子を持つメッセージがキューで使用できるようになるか、タイムアウトが切れるまで待機します。

ReceiveById(String, TimeSpan, MessageQueueTransaction)

指定された識別子と一致するメッセージを (トランザクション キューから) 受信し、指定した識別子を持つメッセージがキューで使用できるようになるか、タイムアウトが切れるまで待機します。

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

指定した識別子に一致するメッセージを受信し、指定した識別子を持つメッセージがキューで使用可能になるか、タイムアウトが切れるまで待機します。

ReceiveById(String)

指定された識別子と一致するメッセージを非トランザクション キューから受信し、指定した識別子を持つメッセージがキューに現在存在しない場合は、すぐに例外を発生させます。

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
String

受信するメッセージの Id 。

返品

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

例外

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)

指定された識別子と一致するメッセージを (トランザクション キューから) 受信し、指定した識別子を持つメッセージが現在キューに存在しない場合は、すぐに例外を発生させます。

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

パラメーター

id
String

受信するメッセージの Id 。

transaction
MessageQueueTransaction

MessageQueueTransaction オブジェクトです。

返品

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

例外

id パラメーターはnull。

-又は-

transaction パラメーターはnull。

指定した 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)

指定された識別子と一致するメッセージを受信し、指定した識別子を持つメッセージが現在キューに存在しない場合は、すぐに例外を発生させます。

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

パラメーター

id
String

受信するメッセージの Id 。

transactionType
MessageQueueTransactionType

メッセージに関連付けるトランザクション コンテキストの種類を記述する、 MessageQueueTransactionType 値の 1 つ。

返品

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

例外

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 パラメーターで定義されたトランザクション コンテキストを使用してアプリケーションに返されます。

メッセージの受信に使用するスレッドに外部トランザクション コンテキストが既にアタッチされている場合は、Automatic パラメーターのtransactionTypeを指定します。 メッセージを 1 つの内部トランザクションとして受信する場合は、 Single を指定します。 トランザクション コンテキスト外のトランザクション キューからメッセージを受信する場合は、 None を指定できます。

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

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

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

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

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

ReceiveById(String, TimeSpan)

指定された識別子と一致するメッセージを (非トランザクション キューから) 受信し、指定した識別子を持つメッセージがキューで使用できるようになるか、タイムアウトが切れるまで待機します。

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
String

受信するメッセージの Id 。

timeout
TimeSpan

新しいメッセージが検査に使用できるようになるまで待機する時間を示す TimeSpan 。

返品

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

例外

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のこのオーバーロードを使用します。 スレッドは、少なくとも指定された期間、または InfiniteTimeout パラメーターにtimeout値を指定した場合、または timeout パラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける場合は無期限にブロックされます。

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

指定した識別子を持つメッセージをキューから削除せずに読み取る場合は、 PeekById(String) メソッドを使用します。 PeekById(String) メソッドは常にキュー内の最初のメッセージを返します。そのため、後続のメソッドの呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

ReceiveById(String, TimeSpan, MessageQueueTransaction)

指定された識別子と一致するメッセージを (トランザクション キューから) 受信し、指定した識別子を持つメッセージがキューで使用できるようになるか、タイムアウトが切れるまで待機します。

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

パラメーター

id
String

受信するメッセージの Id 。

timeout
TimeSpan

新しいメッセージが検査に使用できるようになるまで待機する時間を示す TimeSpan 。

transaction
MessageQueueTransaction

MessageQueueTransaction オブジェクトです。

返品

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

例外

id パラメーターはnull。

-又は-

transaction パラメーターはnull。

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のこのオーバーロードを使用します。 スレッドは、少なくとも指定された期間、または InfiniteTimeout パラメーターにtimeout値を指定した場合、または timeout パラメーターで指定されたタイムアウト期間内にキューに新しいメッセージが引き続き到着する場合は無期限にブロックされます。

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

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

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

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

指定した識別子に一致するメッセージを受信し、指定した識別子を持つメッセージがキューで使用可能になるか、タイムアウトが切れるまで待機します。

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

パラメーター

id
String

受信するメッセージの Id 。

timeout
TimeSpan

新しいメッセージが検査に使用できるようになるまで待機する時間を示す TimeSpan 。

transactionType
MessageQueueTransactionType

メッセージに関連付けるトランザクション コンテキストの種類を記述する、 MessageQueueTransactionType 値の 1 つ。

返品

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

例外

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 パラメーターと一致するメッセージが到着するまで、無期限に実行を続けることができます。

メッセージの受信に使用するスレッドに外部トランザクション コンテキストが既にアタッチされている場合は、Automatic パラメーターのtransactionTypeを指定します。 メッセージを 1 つの内部トランザクションとして受信する場合は、 Single を指定します。 トランザクション コンテキスト外のトランザクション キューからメッセージを受信する場合は、 None を指定できます。

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

ReceiveById(String) パラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける限り、現在のスレッドをブロックできる場合は、timeoutのこのオーバーロードを使用します。 スレッドは、少なくとも指定された期間、または InfiniteTimeout パラメーターにtimeout値を指定した場合、または timeout パラメーターで指定されたタイムアウト期間内に新しいメッセージがキューに到着し続ける場合は無期限にブロックされます。

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

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

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

次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。

ワークグループ モード 在庫有り
ローカル コンピューター はい
ローカル コンピューターと直接の形式名 はい
リモート コンピューター いいえ
リモート コンピューターと直接の形式名 はい

こちらもご覧ください

適用対象