MessageQueue.ReceiveById メソッド

定義

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

受信するメッセージの Id

戻り値

渡された 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

パラメーター

id
String

受信するメッセージの Id

transaction
MessageQueueTransaction

MessageQueueTransaction オブジェクト。

戻り値

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

例外

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)

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

パラメーター

id
String

受信するメッセージの Id

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
String

受信するメッセージの Id

timeout
TimeSpan

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

戻り値

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

例外

id パラメーターが null です。

timeout パラメーターに指定した値が無効です。timeoutZero よりも小さいか、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

パラメーター

id
String

受信するメッセージの Id

timeout
TimeSpan

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

transaction
MessageQueueTransaction

MessageQueueTransaction オブジェクト。

戻り値

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

例外

id パラメーターが null です。

または

transaction パラメーターが null です。

timeout パラメーターに指定した値が無効です。timeoutZero よりも小さいか、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

パラメーター

id
String

受信するメッセージの Id

timeout
TimeSpan

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

transactionType
MessageQueueTransactionType

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

戻り値

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

例外

id パラメーターが null です。

timeout パラメーターに指定した値が無効です。timeoutZero よりも小さいか、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) 、トランザクションが中止された場合はロールバックする必要はありません。

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

ワークグループ モード 利用可能
ローカル コンピューター はい
ローカル コンピューターと直接形式の名前 はい
リモート コンピューター いいえ
リモート コンピューターと直接形式の名前 はい

こちらもご覧ください

適用対象