MessageQueue.ReceiveByCorrelationId メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
指定した相関 ID と一致するメッセージを受信します。
オーバーロード
ReceiveByCorrelationId(String, TimeSpan, MessageQueueTransactionType) |
指定した相関 ID と一致するメッセージを受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。 |
ReceiveByCorrelationId(String, TimeSpan, MessageQueueTransaction) |
指定した相関 ID と一致するメッセージを (トランザクション キューから) 受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。 |
ReceiveByCorrelationId(String, TimeSpan) |
指定した相関 ID と一致するメッセージを (非トランザクション キューから) 受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。 |
ReceiveByCorrelationId(String, MessageQueueTransactionType) |
指定した相関 ID と一致するメッセージを受信します。現在、指定した相関 ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。 |
ReceiveByCorrelationId(String, MessageQueueTransaction) |
指定した相関 ID と一致するメッセージを (トランザクション キューから) 受信します。現在、指定した相関 ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。 |
ReceiveByCorrelationId(String) |
指定した相関 ID と一致するメッセージを (非トランザクション キューから) 受信します。現在、指定した相関 ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。 |
ReceiveByCorrelationId(String, TimeSpan, MessageQueueTransactionType)
指定した相関 ID と一致するメッセージを受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。
public:
System::Messaging::Message ^ ReceiveByCorrelationId(System::String ^ correlationId, TimeSpan timeout, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message ReceiveByCorrelationId (string correlationId, TimeSpan timeout, System.Messaging.MessageQueueTransactionType transactionType);
member this.ReceiveByCorrelationId : string * TimeSpan * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function ReceiveByCorrelationId (correlationId As String, timeout As TimeSpan, transactionType As MessageQueueTransactionType) As Message
パラメーター
- correlationId
- String
受信するメッセージの CorrelationId。
- transactionType
- MessageQueueTransactionType
メッセージと関連付けるトランザクション コンテキストの種類を示す、MessageQueueTransactionType 値の 1 つ。
戻り値
渡された correlationId
パラメーターと一致する CorrelationId を持つ Message。
例外
correlationId
パラメーターが null
です。
指定した correlationId
を持つメッセージは見つかりませんでした。
timeout
パラメーターに指定した値が無効です。timeout
が Zero よりも小さいか、InfiniteTimeout よりも大きい可能性があります。
transactionType
パラメーターが、MessageQueueTransactionType メンバーの 1 つではありません。
指定した correlationId
を持つメッセージがキューに存在せず、タイムアウトが経過する前にキューに到達することもありませんでした。
- または -
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveByCorrelationId(String, TimeSpan, MessageQueueTransactionType) の使用方法を示します。
// Connect to a nontransactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message to the nontransactional queue.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the nontransactional queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue^ transQueue =
gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message^ responseMsg = gcnew Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg->CorrelationId = id;
// Send the response message to the transactional queue.
transQueue->Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType::Single);
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue->MessageReadPropertyFilter->CorrelationId = true;
// Receive the response message from the transactional queue.
responseMsg = transQueue->ReceiveByCorrelationId(id,
TimeSpan::FromSeconds(10.0), MessageQueueTransactionType::Single);
// Display the response message's property values.
Console::WriteLine("Message.Label: {0}", responseMsg->Label);
Console::WriteLine("Message.CorrelationId: {0}",
responseMsg->CorrelationId);
transQueue->Close();
queue->Close();
// Connect to a nontransactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message to the nontransactional queue.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the nontransactional queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue transQueue = new MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message responseMsg = new Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg.CorrelationId = id;
// Send the response message to the transactional queue.
transQueue.Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType.Single);
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue.MessageReadPropertyFilter.CorrelationId = true;
// Receive the response message from the transactional queue.
responseMsg = transQueue.ReceiveByCorrelationId(id,
TimeSpan.FromSeconds(10.0), MessageQueueTransactionType.Single);
// Display the response message's property values.
Console.WriteLine("Message.Label: {0}", responseMsg.Label);
Console.WriteLine("Message.CorrelationId: {0}",
responseMsg.CorrelationId);
注釈
このメソッドは、 によって MessageQueue 参照されるキューで、指定されたパラメーターと一致する CorrelationId メッセージを検索 correlationId
します。 このメソッドは、 パラメーターで指定された関連付け識別子を持つメッセージが、 パラメーターで correlationId
定義されたトランザクション コンテキストを使用してキュー内にある場合に、すぐにを transactionType
返します。 それ以外の場合、メソッドは、指定された期間に新しいメッセージが到着するまで待機します。 タイムアウトが切れる前に新しいメッセージが到着しない場合は、例外がスローされます。
パラメーターでは timeout
、このメソッドの合計実行時間は指定されません。 代わりに、新しいメッセージがキューに到着するまでの時間を指定します。 新しいメッセージが到着するたびに、このメソッドは新しいメッセージの を CorrelationId 調べて、 パラメーターと一致 correlationId
するかどうかを確認します。 そうでない場合、このメソッドはタイムアウト期間を開始し、別の新しいメッセージが到着するまで待機します。 したがって、タイムアウト期間内に新しいメッセージが到着し続ける場合、このメソッドは、新しいメッセージが到着せずにタイムアウト期間が切れるまで、またはパラメーターに一致correlationId
するCorrelationIdメッセージが到着するまで、無期限に実行を続けることができます。 メッセージの受信に使用するtransactionType
スレッドに外部トランザクション コンテキストが既にアタッチされている場合は、 パラメーターに を指定Automatic
します。 メッセージを 1 つの内部トランザクションとして受信するかどうかを指定 Single
します。 トランザクション コンテキストの外部のトランザクション キューからメッセージを受信するかどうかを指定 None
できます。
トランザクション キューからメッセージを受信するためにこのメソッドが呼び出された場合、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
プロパティは CorrelationId 、キューに送信されたメッセージを関連付けられた応答、レポート、または受信確認メッセージに関連付けるために使用されます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveById(String) 。メソッドは、一意の識別子を指定してメッセージを取得するために使用されます。
指定された関連付け識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを PeekByCorrelationId(String) 使用します。 メソッドは PeekByCorrelationId(String) 常にキュー内の最初のメッセージを返すので、優先順位の高いメッセージがキューに到着しない限り、メソッドの後続の呼び出しでは同じメッセージが返されます。 への PeekByCorrelationId(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 キュー内のメッセージは削除されないため PeekByCorrelationId(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接形式の名前 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveByCorrelationId(String, TimeSpan, MessageQueueTransaction)
指定した相関 ID と一致するメッセージを (トランザクション キューから) 受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。
public:
System::Messaging::Message ^ ReceiveByCorrelationId(System::String ^ correlationId, TimeSpan timeout, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message ReceiveByCorrelationId (string correlationId, TimeSpan timeout, System.Messaging.MessageQueueTransaction transaction);
member this.ReceiveByCorrelationId : string * TimeSpan * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function ReceiveByCorrelationId (correlationId As String, timeout As TimeSpan, transaction As MessageQueueTransaction) As Message
パラメーター
- correlationId
- String
受信するメッセージの CorrelationId。
- transaction
- MessageQueueTransaction
MessageQueueTransaction オブジェクト。
戻り値
渡された correlationId
パラメーターと一致する CorrelationId を持つ Message。
例外
timeout
パラメーターに指定した値が無効です。timeout
が Zero よりも小さいか、InfiniteTimeout よりも大きい可能性があります。
指定した correlationId
を持つメッセージがキューに存在せず、タイムアウトが経過する前にキューに到達することもありませんでした。
- または -
キューが非トランザクション キューです。
- または -
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveByCorrelationId(String, TimeSpan, MessageQueueTransaction) の使用方法を示します。
// Connect to a nontransactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message to the nontransactional queue.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the nontransactional queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue^ transQueue =
gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message^ responseMsg = gcnew Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg->CorrelationId = id;
// Send the response message to the transactional queue.
transQueue->Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType::Single);
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue->MessageReadPropertyFilter->CorrelationId = true;
// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();
try
{
// Begin a transaction.
transaction->Begin();
// Receive the response message from the transactional queue.
responseMsg = transQueue->ReceiveByCorrelationId(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;
transQueue->Close();
queue->Close();
}
// Display the response message's property values.
Console::WriteLine("Message.Label: {0}", responseMsg->Label);
Console::WriteLine("Message.CorrelationId: {0}",
responseMsg->CorrelationId);
// Connect to a nontransactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message to the nontransactional queue.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the nontransactional queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue transQueue = new MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message responseMsg = new Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg.CorrelationId = id;
// Send the response message to the transactional queue.
transQueue.Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType.Single);
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue.MessageReadPropertyFilter.CorrelationId = true;
// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();
try
{
// Begin a transaction.
transaction.Begin();
// Receive the response message from the transactional queue.
responseMsg = transQueue.ReceiveByCorrelationId(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();
}
// Display the response message's property values.
Console.WriteLine("Message.Label: {0}", responseMsg.Label);
Console.WriteLine("Message.CorrelationId: {0}",
responseMsg.CorrelationId);
注釈
このメソッドは、 によってMessageQueue参照されるトランザクション キューで、指定されたcorrelationId
パラメーターと一致するCorrelationIdメッセージを検索します。 このメソッドは、 パラメーターで指定された関連付け識別子を持つメッセージが、 パラメーターで correlationId
定義された内部トランザクション コンテキストを使用してキュー内にある場合に、すぐにを transaction
返します。 それ以外の場合、メソッドは、指定された期間に新しいメッセージが到着するまで待機します。 タイムアウトが切れる前に新しいメッセージが到着しない場合は、例外がスローされます。
パラメーターでは timeout
、このメソッドの合計実行時間は指定されません。 代わりに、新しいメッセージがキューに到着するまでの時間を指定します。 新しいメッセージが到着するたびに、このメソッドは新しいメッセージの を CorrelationId 調べて、 パラメーターと一致 correlationId
するかどうかを確認します。 そうでない場合、このメソッドはタイムアウト期間を開始し、別の新しいメッセージが到着するまで待機します。 したがって、タイムアウト期間内に新しいメッセージが到着し続ける場合、このメソッドは、新しいメッセージが到着せずにタイムアウト期間が切れるまで、またはパラメーターに一致correlationId
するCorrelationIdメッセージが到着するまで、無期限に実行を続けることができます。
このメソッドはトランザクション キューで呼び出されるため、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
プロパティは CorrelationId 、キューに送信されたメッセージを関連付けられた応答、レポート、または受信確認メッセージに関連付けるために使用されます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返します ReceiveById(String) 。メソッドは、一意の識別子を指定してメッセージを取得するために使用されます。
指定された関連付け識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを PeekByCorrelationId(String) 使用します。 メソッドは PeekByCorrelationId(String) 常にキュー内の最初のメッセージを返すので、優先順位の高いメッセージがキューに到着しない限り、メソッドの後続の呼び出しでは同じメッセージが返されます。 への PeekByCorrelationId(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 キュー内のメッセージは削除されないため PeekByCorrelationId(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接形式の名前 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveByCorrelationId(String, TimeSpan)
指定した相関 ID と一致するメッセージを (非トランザクション キューから) 受信します。指定した相関 ID のメッセージがキューで利用可能になるか、タイムアウトの時間が経過するまで待機します。
public:
System::Messaging::Message ^ ReceiveByCorrelationId(System::String ^ correlationId, TimeSpan timeout);
public System.Messaging.Message ReceiveByCorrelationId (string correlationId, TimeSpan timeout);
member this.ReceiveByCorrelationId : string * TimeSpan -> System.Messaging.Message
Public Function ReceiveByCorrelationId (correlationId As String, timeout As TimeSpan) As Message
パラメーター
- correlationId
- String
受信するメッセージの CorrelationId。
戻り値
渡された correlationId
パラメーターと一致する CorrelationId を持つ Message。
例外
correlationId
パラメーターが null
です。
timeout
パラメーターに指定した値が無効です。timeout
が Zero よりも小さいか、InfiniteTimeout よりも大きい可能性があります。
指定した correlationId
を持つメッセージがキューに存在せず、タイムアウトが経過する前にキューに到達することもありませんでした。
- または -
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveByCorrelationId(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");
// Designate a queue to receive the acknowledgement message for this
// message.
msg->AdministrationQueue =
gcnew MessageQueue(".\\exampleAdminQueue");
// Set the message to generate an acknowledgement message upon its
// arrival.
msg->AcknowledgeType = AcknowledgeTypes::PositiveArrival;
// 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));
// Connect to the admin queue.
MessageQueue^ adminQueue =
gcnew MessageQueue(".\\exampleAdminQueue");
// Set the admin queue's MessageReadPropertyFilter property to ensure
// that the acknowledgement message includes the desired properties.
adminQueue->MessageReadPropertyFilter->Acknowledgment = true;
adminQueue->MessageReadPropertyFilter->CorrelationId = true;
// Receive the acknowledgement message from the admin queue.
Message^ ackMsg = adminQueue->ReceiveByCorrelationId(id,
TimeSpan::FromSeconds(10.0));
// Display the acknowledgement message's property values.
Console::WriteLine("Message.Label: {0}", ackMsg->Label);
Console::WriteLine("Message.Acknowledgment: {0}",
ackMsg->Acknowledgment);
Console::WriteLine("Message.CorrelationId: {0}", ackMsg->CorrelationId);
adminQueue->Close();
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");
// Designate a queue to receive the acknowledgement message for this
// message.
msg.AdministrationQueue = new MessageQueue(".\\exampleAdminQueue");
// Set the message to generate an acknowledgement message upon its
// arrival.
msg.AcknowledgeType = AcknowledgeTypes.PositiveArrival;
// 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));
// Connect to the admin queue.
MessageQueue adminQueue = new MessageQueue(".\\exampleAdminQueue");
// Set the admin queue's MessageReadPropertyFilter property to ensure
// that the acknowledgement message includes the desired properties.
adminQueue.MessageReadPropertyFilter.Acknowledgment = true;
adminQueue.MessageReadPropertyFilter.CorrelationId = true;
// Receive the acknowledgement message from the admin queue.
Message ackMsg = adminQueue.ReceiveByCorrelationId(id,
TimeSpan.FromSeconds(10.0));
// Display the acknowledgement message's property values.
Console.WriteLine("Message.Label: {0}", ackMsg.Label);
Console.WriteLine("Message.Acknowledgment: {0}", ackMsg.Acknowledgment);
Console.WriteLine("Message.CorrelationId: {0}", ackMsg.CorrelationId);
注釈
このメソッドは、 によってMessageQueue参照される非トランザクション キューで、指定されたcorrelationId
パラメーターとCorrelationId一致するメッセージを検索します。 パラメーターで correlationId
指定された関連付け識別子を持つメッセージがキュー内にある場合、このメソッドは直ちにを返します。 それ以外の場合、メソッドは、新しいメッセージが到着するまで、指定された期間を待機します。 タイムアウトが切れる前に新しいメッセージが到着しない場合は、例外がスローされます。
パラメーターは timeout
、このメソッドの合計実行時間を指定しません。 代わりに、新しいメッセージがキューに到着するまでの時間を指定します。 新しいメッセージが到着するたびに、このメソッドは新しいメッセージの を CorrelationId 調べて、 パラメーターと一致 correlationId
するかどうかを確認します。 そうでない場合、このメソッドはタイムアウト期間を開始し、別の新しいメッセージが到着するまで待機します。 そのため、タイムアウト期間内に新しいメッセージが引き続き到着する場合は、タイムアウト期間が切れるまで、またはパラメーターに一致correlationId
するメッセージがCorrelationId到着するまで、このメソッドを無期限に実行し続けることができます。
プロパティは CorrelationId 、キューに送信されたメッセージを関連付けられた応答、レポート、または受信確認メッセージに関連付けるために使用されます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返し ReceiveById(String) 、 メソッドを使用して一意の識別子を指定してメッセージを取得します。
指定した関連付け識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekByCorrelationId(String) 。 メソッドは PeekByCorrelationId(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveByCorrelationId(String, MessageQueueTransactionType)
指定した相関 ID と一致するメッセージを受信します。現在、指定した相関 ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。
public:
System::Messaging::Message ^ ReceiveByCorrelationId(System::String ^ correlationId, System::Messaging::MessageQueueTransactionType transactionType);
public System.Messaging.Message ReceiveByCorrelationId (string correlationId, System.Messaging.MessageQueueTransactionType transactionType);
member this.ReceiveByCorrelationId : string * System.Messaging.MessageQueueTransactionType -> System.Messaging.Message
Public Function ReceiveByCorrelationId (correlationId As String, transactionType As MessageQueueTransactionType) As Message
パラメーター
- correlationId
- String
受信するメッセージの CorrelationId。
- transactionType
- MessageQueueTransactionType
メッセージと関連付けるトランザクション コンテキストの種類を示す、MessageQueueTransactionType 値の 1 つ。
戻り値
渡された correlationId
パラメーターと一致する CorrelationId を持つ Message。
例外
correlationId
パラメーターが null
です。
指定した correlationId
を持つメッセージは見つかりませんでした。
transactionType
パラメーターが、MessageQueueTransactionType メンバーの 1 つではありません。
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例は、ReceiveByCorrelationId(String, MessageQueueTransactionType) の使用方法を示します。
// Connect to a nontransactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message to the nontransactional queue.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the nontransactional queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue^ transQueue =
gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message^ responseMsg = gcnew Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg->CorrelationId = id;
// Send the response message to the transactional queue.
transQueue->Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType::Single);
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue->MessageReadPropertyFilter->CorrelationId = true;
// Receive the response message from the transactional queue.
responseMsg = transQueue->ReceiveByCorrelationId(id,
MessageQueueTransactionType::Single);
// Display the response message's property values.
Console::WriteLine("Message.Label: {0}", responseMsg->Label);
Console::WriteLine("Message.CorrelationId: {0}",
responseMsg->CorrelationId);
transQueue->Close();
queue->Close();
// Connect to a nontransactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message to the nontransactional queue.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the nontransactional queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue transQueue = new MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message responseMsg = new Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg.CorrelationId = id;
// Send the response message to the transactional queue.
transQueue.Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType.Single);
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue.MessageReadPropertyFilter.CorrelationId = true;
// Receive the response message from the transactional queue.
responseMsg = transQueue.ReceiveByCorrelationId(id,
MessageQueueTransactionType.Single);
// Display the response message's property values.
Console.WriteLine("Message.Label: {0}", responseMsg.Label);
Console.WriteLine("Message.CorrelationId: {0}",
responseMsg.CorrelationId);
注釈
このメソッドは、 によってMessageQueue参照されるキューで、指定されたcorrelationId
パラメーターとCorrelationId一致するメッセージを検索します。 パラメーターに一致 correlationID
するメッセージが見つからない場合は、例外がスローされます。 それ以外の場合、メッセージはキューから削除され、 パラメーターで定義されたトランザクション コンテキストを使用してアプリケーションに transactionType
返されます。
メッセージの受信に使用するtransactionType
外部トランザクション コンテキストがスレッドに既にアタッチされている場合は、 パラメーターに を指定Automatic
します。 メッセージを 1 つの内部トランザクションとして受信するかどうかを指定 Single
します。 トランザクション コンテキスト以外のトランザクション キューからメッセージを受信するかどうかを指定 None
できます。
トランザクション キューからメッセージを受信するためにこのメソッドが呼び出された場合、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
プロパティは CorrelationId 、キューに送信されたメッセージを関連付けられた応答、レポート、または受信確認メッセージに関連付けるために使用されます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返し ReceiveById(String) 、 メソッドを使用して一意の識別子を指定してメッセージを取得します。
指定した関連付け識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekByCorrelationId(String) 。 メソッドは PeekByCorrelationId(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。 への PeekByCorrelationId(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 はキュー内のメッセージを削除しないため PeekByCorrelationId(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接の形式名 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveByCorrelationId(String, MessageQueueTransaction)
指定した相関 ID と一致するメッセージを (トランザクション キューから) 受信します。現在、指定した相関 ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。
public:
System::Messaging::Message ^ ReceiveByCorrelationId(System::String ^ correlationId, System::Messaging::MessageQueueTransaction ^ transaction);
public System.Messaging.Message ReceiveByCorrelationId (string correlationId, System.Messaging.MessageQueueTransaction transaction);
member this.ReceiveByCorrelationId : string * System.Messaging.MessageQueueTransaction -> System.Messaging.Message
Public Function ReceiveByCorrelationId (correlationId As String, transaction As MessageQueueTransaction) As Message
パラメーター
- correlationId
- String
受信するメッセージの CorrelationId。
- transaction
- MessageQueueTransaction
MessageQueueTransaction オブジェクト。
戻り値
渡された correlationId
パラメーターと一致する CorrelationId を持つ Message。
例外
指定した correlationId
を持つメッセージは見つかりませんでした。
例
次のコード例は、ReceiveByCorrelationId(String, MessageQueueTransaction) の使用方法を示します。
// Connect to a nontransactional queue on the local computer.
MessageQueue^ queue = gcnew MessageQueue(".\\exampleQueue");
// Create a new message.
Message^ msg = gcnew Message("Example Message Body");
// Send the message to the nontransactional queue.
queue->Send(msg, "Example Message Label");
// Get the message's Id property value.
String^ id = msg->Id;
// Receive the message from the nontransactional queue.
msg = queue->ReceiveById(id, TimeSpan::FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue^ transQueue =
gcnew MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message^ responseMsg = gcnew Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg->CorrelationId = id;
// Send the response message to the transactional queue.
transQueue->Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType::Single);
// Simulate doing other work so the message has time to arrive.
System::Threading::Thread::Sleep(TimeSpan::FromSeconds(10.0));
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue->MessageReadPropertyFilter->CorrelationId = true;
// Create a message queuing transaction.
MessageQueueTransaction^ transaction = gcnew MessageQueueTransaction();
try
{
// Begin a transaction.
transaction->Begin();
// Receive the response message from the transactional queue.
responseMsg = transQueue->ReceiveByCorrelationId(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;
transQueue->Close();
queue->Close();
}
// Display the response message's property values.
Console::WriteLine("Message.Label: {0}", responseMsg->Label);
Console::WriteLine("Message.CorrelationId: {0}",
responseMsg->CorrelationId);
// Connect to a nontransactional queue on the local computer.
MessageQueue queue = new MessageQueue(".\\exampleQueue");
// Create a new message.
Message msg = new Message("Example Message Body");
// Send the message to the nontransactional queue.
queue.Send(msg, "Example Message Label");
// Get the message's Id property value.
string id = msg.Id;
// Receive the message from the nontransactional queue.
msg = queue.ReceiveById(id, TimeSpan.FromSeconds(10.0));
// Connect to a transactional queue on the local computer.
MessageQueue transQueue = new MessageQueue(".\\exampleTransQueue");
// Create a new message in response to the original message.
Message responseMsg = new Message("Example Response Message Body");
// Set the response message's CorrelationId property value to the Id
// property value of the original message.
responseMsg.CorrelationId = id;
// Send the response message to the transactional queue.
transQueue.Send(responseMsg, "Example Response Message Label",
MessageQueueTransactionType.Single);
// Simulate doing other work so the message has time to arrive.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds(10.0));
// Set the transactional queue's MessageReadPropertyFilter property to
// ensure that the response message includes the desired properties.
transQueue.MessageReadPropertyFilter.CorrelationId = true;
// Create a message queuing transaction.
MessageQueueTransaction transaction = new MessageQueueTransaction();
try
{
// Begin a transaction.
transaction.Begin();
// Receive the response message from the transactional queue.
responseMsg = transQueue.ReceiveByCorrelationId(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();
}
// Display the response message's property values.
Console.WriteLine("Message.Label: {0}", responseMsg.Label);
Console.WriteLine("Message.CorrelationId: {0}",
responseMsg.CorrelationId);
注釈
このメソッドは、 によってMessageQueue参照されるトランザクション キューで、指定されたcorrelationId
パラメーターとCorrelationId一致するメッセージを検索します。 パラメーターに一致 correlationID
するメッセージが見つからない場合は、例外がスローされます。 それ以外の場合、メッセージはキューから削除され、 パラメーターで定義された内部トランザクション コンテキストを使用してアプリケーションに transaction
返されます。
このメソッドはトランザクション キューで呼び出されるため、トランザクションが中止されると、受信したメッセージがキューに返されます。 トランザクションがコミットされるまで、メッセージはキューから完全に削除されません。
プロパティは CorrelationId 、キューに送信されたメッセージを関連付けられた応答、レポート、または受信確認メッセージに関連付けるために使用されます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返し ReceiveById(String) 、 メソッドを使用して一意の識別子を指定してメッセージを取得します。
指定した関連付け識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを使用します PeekByCorrelationId(String) 。 メソッドは PeekByCorrelationId(String) 常にキュー内の最初のメッセージを返します。そのため、 メソッドの後続の呼び出しでは、優先順位の高いメッセージがキューに到着しない限り、同じメッセージが返されます。 への PeekByCorrelationId(String)呼び出しによって返されるメッセージに関連付けられたトランザクション コンテキストはありません。 はキュー内のメッセージを削除しないため PeekByCorrelationId(String) 、トランザクションが中止された場合はロールバックする必要はありません。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接形式の名前 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
ReceiveByCorrelationId(String)
指定した相関 ID と一致するメッセージを (非トランザクション キューから) 受信します。現在、指定した相関 ID と一致するメッセージがキューに存在しない場合は、すぐに例外を発生させます。
public:
System::Messaging::Message ^ ReceiveByCorrelationId(System::String ^ correlationId);
public System.Messaging.Message ReceiveByCorrelationId (string correlationId);
member this.ReceiveByCorrelationId : string -> System.Messaging.Message
Public Function ReceiveByCorrelationId (correlationId As String) As Message
パラメーター
- correlationId
- String
受信するメッセージの CorrelationId。
戻り値
渡された correlationId
パラメーターと一致する CorrelationId を持つ Message。
例外
correlationId
パラメーターが null
です。
指定した correlationId
を持つメッセージは見つかりませんでした。
メッセージ キューのメソッドにアクセスしたときにエラーが発生しました。
例
次のコード例では、キューとの間の注文を含むメッセージを送受信します。 具体的には、元のメッセージがキューに到達するか、キューから取得されたときに、肯定確認を要求します。
#using <system.dll>
#using <system.messaging.dll>
using namespace System;
using namespace System::Messaging;
ref class MyNewQueue
{
public:
static void CreateQueue( String^ queuePath )
{
try
{
if ( !MessageQueue::Exists( queuePath ) )
{
MessageQueue::Create( queuePath );
}
else
{
Console::WriteLine( "{0} already exists.", queuePath );
}
}
catch ( MessageQueueException^ e )
{
Console::WriteLine( e->Message );
}
}
void SendMessage()
{
// Connect to a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
// Create a new message.
Message^ myMessage = gcnew Message( "Original Message" );
myMessage->AdministrationQueue = gcnew MessageQueue( ".\\myAdministrationQueue" );
myMessage->AcknowledgeType = (AcknowledgeTypes)(AcknowledgeTypes::PositiveReceive | AcknowledgeTypes::PositiveArrival);
// Send the Order to the queue.
myQueue->Send( myMessage );
return;
}
String^ ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue^ myQueue = gcnew MessageQueue( ".\\myQueue" );
myQueue->MessageReadPropertyFilter->CorrelationId = true;
array<Type^>^p = gcnew array<Type^>(1);
p[ 0 ] = String::typeid;
myQueue->Formatter = gcnew XmlMessageFormatter( p );
String^ returnString = nullptr;
try
{
// Receive and format the message.
Message^ myMessage = myQueue->Receive();
// Display message information.
Console::WriteLine( "____________________________________________" );
Console::WriteLine( "Original message information--" );
Console::WriteLine( "Body: {0}", myMessage->Body );
Console::WriteLine( "Id: {0}", myMessage->Id );
Console::WriteLine( "____________________________________________" );
returnString = myMessage->Id;
}
catch ( MessageQueueException^ )
{
// Handle Message Queuing exceptions.
}
// Handle invalid serialization format.
catch ( InvalidOperationException^ e )
{
Console::WriteLine( e->Message );
}
// Catch other exceptions as necessary.
return returnString;
}
void ReceiveAcknowledgment( String^ messageId, String^ queuePath )
{
bool found = false;
MessageQueue^ queue = gcnew MessageQueue( queuePath );
queue->MessageReadPropertyFilter->CorrelationId = true;
queue->MessageReadPropertyFilter->Acknowledgment = true;
try
{
while ( queue->PeekByCorrelationId( messageId ) != nullptr )
{
Message^ myAcknowledgmentMessage = queue->ReceiveByCorrelationId( messageId );
// Output acknowledgment message information. The correlation Id is identical
// to the id of the original message.
Console::WriteLine( "Acknowledgment Message Information--" );
Console::WriteLine( "Correlation Id: {0}", myAcknowledgmentMessage->CorrelationId );
Console::WriteLine( "Id: {0}", myAcknowledgmentMessage->Id );
Console::WriteLine( "Acknowledgment Type: {0}", myAcknowledgmentMessage->Acknowledgment );
Console::WriteLine( "____________________________________________" );
found = true;
}
}
catch ( InvalidOperationException^ e )
{
// This exception would be thrown if there is no (further) acknowledgment message
// with the specified correlation Id. Only output a message if there are no messages;
// not if the loop has found at least one.
if ( found == false )
{
Console::WriteLine( e->Message );
}
// Handle other causes of invalid operation exception.
}
}
};
int main()
{
// Create a new instance of the class.
MyNewQueue^ myNewQueue = gcnew MyNewQueue;
// Create new queues.
MyNewQueue::CreateQueue( ".\\myQueue" );
MyNewQueue::CreateQueue( ".\\myAdministrationQueue" );
// Send messages to a queue.
myNewQueue->SendMessage();
// Receive messages from a queue.
String^ messageId = myNewQueue->ReceiveMessage();
// Receive acknowledgment message.
if ( messageId != nullptr )
{
myNewQueue->ReceiveAcknowledgment( messageId, ".\\myAdministrationQueue" );
}
return 0;
}
using System;
using System.Messaging;
namespace MyProject
{
/// <summary>
/// Provides a container class for the example.
/// </summary>
public class MyNewQueue
{
//**************************************************
// Provides an entry point into the application.
//
// This example sends and receives a message from
// a queue.
//**************************************************
public static void Main()
{
// Create a new instance of the class.
MyNewQueue myNewQueue = new MyNewQueue();
// Create new queues.
CreateQueue(".\\myQueue");
CreateQueue(".\\myAdministrationQueue");
// Send messages to a queue.
myNewQueue.SendMessage();
// Receive messages from a queue.
string messageId = myNewQueue.ReceiveMessage();
// Receive acknowledgment message.
if(messageId != null)
{
myNewQueue.ReceiveAcknowledgment(messageId, ".\\myAdministrationQueue");
}
return;
}
//**************************************************
// Creates a new queue.
//**************************************************
public static void CreateQueue(string queuePath)
{
try
{
if(!MessageQueue.Exists(queuePath))
{
MessageQueue.Create(queuePath);
}
else
{
Console.WriteLine(queuePath + " already exists.");
}
}
catch (MessageQueueException e)
{
Console.WriteLine(e.Message);
}
}
//**************************************************
// Sends a string message to a queue.
//**************************************************
public void SendMessage()
{
// Connect to a queue on the local computer.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
// Create a new message.
Message myMessage = new Message("Original Message");
myMessage.AdministrationQueue = new MessageQueue(".\\myAdministrationQueue");
myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive | AcknowledgeTypes.PositiveArrival;
// Send the Order to the queue.
myQueue.Send(myMessage);
return;
}
//**************************************************
// Receives a message containing an Order.
//**************************************************
public string ReceiveMessage()
{
// Connect to the a queue on the local computer.
MessageQueue myQueue = new MessageQueue(".\\myQueue");
myQueue.MessageReadPropertyFilter.CorrelationId = true;
// Set the formatter to indicate body contains an Order.
myQueue.Formatter = new XmlMessageFormatter(new Type[]
{typeof(string)});
string returnString = null;
try
{
// Receive and format the message.
Message myMessage = myQueue.Receive();
// Display message information.
Console.WriteLine("____________________________________________");
Console.WriteLine("Original message information--");
Console.WriteLine("Body: " +myMessage.Body.ToString());
Console.WriteLine("Id: " + myMessage.Id.ToString());
Console.WriteLine("____________________________________________");
returnString = myMessage.Id;
}
catch (MessageQueueException)
{
// Handle Message Queuing exceptions.
}
// Handle invalid serialization format.
catch (InvalidOperationException e)
{
Console.WriteLine(e.Message);
}
// Catch other exceptions as necessary.
return returnString;
}
//**************************************************
// Receives a message containing an Order.
//**************************************************
public void ReceiveAcknowledgment(string messageId, string queuePath)
{
bool found = false;
MessageQueue queue = new MessageQueue(queuePath);
queue.MessageReadPropertyFilter.CorrelationId = true;
queue.MessageReadPropertyFilter.Acknowledgment = true;
try
{
while(queue.PeekByCorrelationId(messageId) != null)
{
Message myAcknowledgmentMessage = queue.ReceiveByCorrelationId(messageId);
// Output acknowledgment message information. The correlation Id is identical
// to the id of the original message.
Console.WriteLine("Acknowledgment Message Information--");
Console.WriteLine("Correlation Id: " + myAcknowledgmentMessage.CorrelationId.ToString());
Console.WriteLine("Id: " + myAcknowledgmentMessage.Id.ToString());
Console.WriteLine("Acknowledgment Type: " + myAcknowledgmentMessage.Acknowledgment.ToString());
Console.WriteLine("____________________________________________");
found = true;
}
}
catch (InvalidOperationException e)
{
// This exception would be thrown if there is no (further) acknowledgment message
// with the specified correlation Id. Only output a message if there are no messages;
// not if the loop has found at least one.
if(found == false)
{
Console.WriteLine(e.Message);
}
// Handle other causes of invalid operation exception.
}
}
}
}
Imports System.Messaging
' Provides a container class for the example.
Public Class MyNewQueue
' Provides an entry point into the application.
' This example sends and receives a message from
' a queue.
Public Shared Sub Main()
' Create a new instance of the class.
Dim myNewQueue As New MyNewQueue()
' Create new queues.
CreateQueue(".\myQueue")
CreateQueue(".\myAdministrationQueue")
' Send messages to a queue.
myNewQueue.SendMessage()
' Receive messages from a queue.
Dim messageId As String = myNewQueue.ReceiveMessage()
' Receive acknowledgment message.
If Not (messageId Is Nothing) Then
myNewQueue.ReceiveAcknowledgment(messageId, ".\myAdministrationQueue")
End If
Return
End Sub
' Creates a new queue.
Public Shared Sub CreateQueue(queuePath As String)
Try
If Not MessageQueue.Exists(queuePath) Then
MessageQueue.Create(queuePath)
Else
Console.WriteLine((queuePath + " already exists."))
End If
Catch e As MessageQueueException
Console.WriteLine(e.Message)
End Try
End Sub
' Sends a string message to a queue.
Public Sub SendMessage()
' Connect to a queue on the local computer.
Dim myQueue As New MessageQueue(".\myQueue")
' Create a new message.
Dim myMessage As New Message("Original Message")
myMessage.AdministrationQueue = New MessageQueue(".\myAdministrationQueue")
myMessage.AcknowledgeType = AcknowledgeTypes.PositiveReceive Or AcknowledgeTypes.PositiveArrival
' Send the Order to the queue.
myQueue.Send(myMessage)
Return
End Sub
' Receives a message containing an Order.
Public Function ReceiveMessage() As String
' Connect to the a queue on the local computer.
Dim myQueue As New MessageQueue(".\myQueue")
myQueue.MessageReadPropertyFilter.CorrelationId = True
' Set the formatter to indicate body contains an Order.
myQueue.Formatter = New XmlMessageFormatter(New Type() {GetType(String)})
Dim returnString As String = Nothing
Try
' Receive and format the message.
Dim myMessage As Message = myQueue.Receive()
' Display message information.
Console.WriteLine("____________________________________________")
Console.WriteLine("Original message information--")
Console.WriteLine(("Body: " + myMessage.Body.ToString()))
Console.WriteLine(("Id: " + myMessage.Id.ToString()))
Console.WriteLine("____________________________________________")
returnString = myMessage.Id
' Handle invalid serialization format.
Catch e As InvalidOperationException
Console.WriteLine(e.Message)
End Try
' Catch other exceptions as necessary.
Return returnString
End Function 'ReceiveMessage
' Receives a message containing an Order.
Public Sub ReceiveAcknowledgment(messageId As String, queuePath As String)
Dim found As Boolean = False
Dim queue As New MessageQueue(queuePath)
queue.MessageReadPropertyFilter.CorrelationId = True
queue.MessageReadPropertyFilter.Acknowledgment = True
Try
While Not (queue.PeekByCorrelationId(messageId) Is Nothing)
Dim myAcknowledgmentMessage As Message = queue.ReceiveByCorrelationId(messageId)
' Output acknowledgment message information. The correlation Id is identical
' to the id of the original message.
Console.WriteLine("Acknowledgment Message Information--")
Console.WriteLine(("Correlation Id: " + myAcknowledgmentMessage.CorrelationId.ToString()))
Console.WriteLine(("Id: " + myAcknowledgmentMessage.Id.ToString()))
Console.WriteLine(("Acknowledgment Type: " + myAcknowledgmentMessage.Acknowledgment.ToString()))
Console.WriteLine("____________________________________________")
found = True
End While
Catch e As InvalidOperationException
' This exception would be thrown if there is no (further) acknowledgment message
' with the specified correlation Id. Only output a message if there are no messages;
' not if the loop has found at least one.
If found = False Then
Console.WriteLine(e.Message)
End If
End Try
End Sub
End Class
注釈
このメソッドは、 によってMessageQueue参照される非トランザクション キューで、指定されたcorrelationId
パラメーターと一致するCorrelationIdメッセージを検索します。 パラメーターに一致 correlationID
するメッセージが見つからない場合は、例外がスローされます。 それ以外の場合、メッセージはキューから削除され、アプリケーションに返されます。
プロパティは CorrelationId 、キューに送信されたメッセージを関連付けられた応答、レポート、または受信確認メッセージに関連付けるために使用されます。
他の 2 つの方法を使用すると、キューからメッセージを受信できます。 メソッドは Receive キュー内の最初のメッセージを返し、メソッドは ReceiveById(String) 一意の識別子を指定してメッセージを取得します。
指定された関連付け識別子を持つメッセージをキューから削除せずに読み取る場合は、 メソッドを PeekByCorrelationId(String) 使用します。 メソッドは PeekByCorrelationId(String) 常にキュー内の最初のメッセージを返すので、優先順位の高いメッセージがキューに到着しない限り、メソッドの後続の呼び出しでは同じメッセージが返されます。
次の表は、このメソッドがさまざまなワークグループ モードで使用できるかどうかを示しています。
ワークグループ モード | 利用可能 |
---|---|
ローカル コンピューター | はい |
ローカル コンピューターと直接形式の名前 | はい |
リモート コンピューター | いいえ |
リモート コンピューターと直接形式の名前 | はい |
こちらもご覧ください
適用対象
.NET