MessageQueue.ReceiveById Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Ontvangt het bericht dat overeenkomt met de opgegeven id, waardoor het uit de wachtrij wordt verwijderd.
Overloads
| Name | Description |
|---|---|
| ReceiveById(String) |
Ontvangt het bericht dat overeenkomt met de opgegeven id van een niet-transactionele wachtrij en genereert onmiddellijk een uitzondering als er momenteel geen bericht met de opgegeven id in de wachtrij bestaat. |
| ReceiveById(String, MessageQueueTransaction) |
Hiermee ontvangt u het bericht dat overeenkomt met de opgegeven id (uit een transactionele wachtrij) en wordt er onmiddellijk een uitzondering gegenereerd als er momenteel geen bericht met de opgegeven id in de wachtrij bestaat. |
| ReceiveById(String, MessageQueueTransactionType) |
Ontvangt het bericht dat overeenkomt met de opgegeven id en genereert onmiddellijk een uitzondering als er momenteel geen bericht met de opgegeven id in de wachtrij bestaat. |
| ReceiveById(String, TimeSpan) |
Ontvangt het bericht dat overeenkomt met de opgegeven id (uit een niet-transactionele wachtrij) en wacht totdat een bericht met de opgegeven id beschikbaar is in de wachtrij of de time-out verloopt. |
| ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Ontvangt het bericht dat overeenkomt met de opgegeven id (uit een transactionele wachtrij) en wacht totdat een bericht met de opgegeven id beschikbaar is in de wachtrij of de time-out verloopt. |
| ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Ontvangt het bericht dat overeenkomt met de opgegeven id en wacht totdat een bericht met de opgegeven id beschikbaar is in de wachtrij of de time-out verloopt. |
ReceiveById(String)
Ontvangt het bericht dat overeenkomt met de opgegeven id van een niet-transactionele wachtrij en genereert onmiddellijk een uitzondering als er momenteel geen bericht met de opgegeven id in de wachtrij bestaat.
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
Parameters
Retouren
De Message eigenschap waarvan Id de eigenschap overeenkomt met de id parameter die is doorgegeven.
Uitzonderingen
De id parameter is null.
Het bericht met de opgegeven id kan niet worden gevonden.
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van 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);
Opmerkingen
Gebruik deze methode om een bericht met een bekende id te lezen en uit de wachtrij te verwijderen. Met deze methode wordt onmiddellijk een uitzondering gegenereerd als het bericht zich niet in de wachtrij bevindt.
De Id eigenschap van een bericht is uniek in de Enterprise Message Queuing, dus er zal maximaal één bericht in de wachtrij staan die overeenkomt met de opgegeven id parameter.
Met twee andere methoden kunt u berichten van een wachtrij ontvangen. De Receive methode retourneert het eerste bericht in de wachtrij en de ReceiveByCorrelationId(String) methode wordt gebruikt om een bevestigings-, rapport- of door toepassing gegenereerd antwoordbericht op te halen dat is gemaakt als gevolg van een bericht dat naar de wachtrij is verzonden.
Als u een bericht met een opgegeven id wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de PeekById(String) methode. De PeekById(String) methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt.
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
ReceiveById(String, MessageQueueTransaction)
Hiermee ontvangt u het bericht dat overeenkomt met de opgegeven id (uit een transactionele wachtrij) en wordt er onmiddellijk een uitzondering gegenereerd als er momenteel geen bericht met de opgegeven id in de wachtrij bestaat.
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
Parameters
- transaction
- MessageQueueTransaction
Het MessageQueueTransaction-object.
Retouren
De Message eigenschap waarvan Id de eigenschap overeenkomt met de id parameter die is doorgegeven.
Uitzonderingen
Het bericht met de opgegeven id kan niet worden gevonden.
De wachtrij is niet-transactioneel.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van 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();
}
Opmerkingen
Gebruik deze methode om een bericht met een bekende id te lezen en te verwijderen uit de wachtrij, met behulp van de interne transactiecontext die is gedefinieerd door de transaction parameter. Met deze methode wordt onmiddellijk een uitzondering gegenereerd als het bericht zich niet in de wachtrij bevindt
De Id eigenschap van een bericht is uniek in de Enterprise Message Queuing, dus er zal maximaal één bericht in de wachtrij staan die overeenkomt met de opgegeven id parameter.
Omdat deze methode wordt aangeroepen in een transactionele wachtrij, wordt het ontvangen bericht geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Met twee andere methoden kunt u berichten van een wachtrij ontvangen. De Receive methode retourneert het eerste bericht in de wachtrij en de ReceiveByCorrelationId(String) methode wordt gebruikt om een bevestigings-, rapport- of door toepassing gegenereerd antwoordbericht op te halen dat is gemaakt als gevolg van een bericht dat naar de wachtrij is verzonden.
Als u een bericht met een opgegeven id wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de PeekById(String) methode. De PeekById(String) methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar PeekById(String). Omdat PeekById(String) er geen berichten in de wachtrij worden verwijderd, is er niets om terug te draaien als de transactie is afgebroken.
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
ReceiveById(String, MessageQueueTransactionType)
Ontvangt het bericht dat overeenkomt met de opgegeven id en genereert onmiddellijk een uitzondering als er momenteel geen bericht met de opgegeven id in de wachtrij bestaat.
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
Parameters
- transactionType
- MessageQueueTransactionType
Een van de MessageQueueTransactionType waarden die het type transactiecontext beschrijven dat aan het bericht moet worden gekoppeld.
Retouren
De Message eigenschap waarvan Id de eigenschap overeenkomt met de id parameter die is doorgegeven.
Uitzonderingen
De id parameter is null.
Het bericht met de opgegeven id kan niet worden gevonden.
De transactionType parameter is geen van de MessageQueueTransactionType leden.
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van 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);
Opmerkingen
Gebruik deze methode om een bericht met een bekende id te lezen en uit de wachtrij te verwijderen. Met deze methode wordt onmiddellijk een uitzondering gegenereerd als het bericht zich niet in de wachtrij bevindt. Anders wordt het bericht uit de wachtrij verwijderd en geretourneerd naar de toepassing met behulp van een transactiecontext die is gedefinieerd door de transactionType parameter.
Geef Automatic op voor de transactionType parameter als er al een externe transactiecontext is gekoppeld aan de thread die u wilt gebruiken om het bericht te ontvangen. Geef op Single of u het bericht wilt ontvangen als één interne transactie. U kunt opgeven None of u een bericht wilt ontvangen van een transactionele wachtrij buiten een transactiecontext.
De Id eigenschap van een bericht is uniek in de Enterprise Message Queuing, dus er zal maximaal één bericht in de wachtrij staan die overeenkomt met de opgegeven id parameter. Als het bericht met de opgegeven id zich in een andere wachtrij bevindt dan het bericht dat aan dit MessageQueue exemplaar is gekoppeld, wordt het bericht niet gevonden.
Als deze methode wordt aangeroepen om een bericht te ontvangen van een transactionele wachtrij, wordt het bericht dat wordt ontvangen, geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Met twee andere methoden kunt u berichten van een wachtrij ontvangen. De Receive methode retourneert het eerste bericht in de wachtrij en de ReceiveByCorrelationId(String) methode wordt gebruikt om een bevestigings-, rapport- of door toepassing gegenereerd antwoordbericht op te halen dat is gemaakt als gevolg van een bericht dat naar de wachtrij is verzonden.
Als u een bericht met een opgegeven id wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de PeekById(String) methode. De PeekById(String) methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar PeekById(String). Omdat PeekById(String) er geen berichten in de wachtrij worden verwijderd, is er niets om terug te draaien als de transactie is afgebroken.
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
ReceiveById(String, TimeSpan)
Ontvangt het bericht dat overeenkomt met de opgegeven id (uit een niet-transactionele wachtrij) en wacht totdat een bericht met de opgegeven id beschikbaar is in de wachtrij of de time-out verloopt.
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
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
Retouren
De Message eigenschap waarvan Id de eigenschap overeenkomt met de id parameter die is doorgegeven.
Uitzonderingen
De id parameter is null.
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht met de opgegeven id in de wachtrij binnengekomen voordat de time-out is verlopen.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van 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));
Opmerkingen
Gebruik deze methode om een bericht met een bekende id te lezen en uit de wachtrij te verwijderen. Deze methode retourneert onmiddellijk als het bericht met de id die is opgegeven door de id parameter zich in de wachtrij bevindt. Anders wacht de methode de opgegeven periode totdat een nieuw bericht binnenkomt. Als er geen nieuw bericht binnenkomt voordat de time-out verloopt, wordt er een uitzondering gegenereerd.
De timeout parameter geeft de totale uitvoeringsduur voor deze methode niet op. In plaats daarvan geeft het de tijd op waarop moet worden gewacht tot een nieuw bericht in de wachtrij aankomt. Telkens wanneer een nieuw bericht binnenkomt, onderzoekt deze methode het Id nieuwe bericht om te zien of het overeenkomt met de id parameter. Zo niet, dan wordt met deze methode de time-outperiode gestart en wordt gewacht tot er een nieuw bericht binnenkomt. Als nieuwe berichten binnen de time-outperiode blijven binnenkomen, is het daarom mogelijk dat deze methode voor onbepaalde tijd wordt uitgevoerd, totdat de time-outperiode verloopt zonder dat er nieuwe berichten binnenkomen of totdat een bericht binnenkomt waarvan Id de id parameter overeenkomt.
De Id eigenschap van een bericht is uniek in de Enterprise Message Queuing, dus er zal maximaal één bericht in de wachtrij staan die overeenkomt met de opgegeven id parameter.
Gebruik deze overbelasting wanneer ReceiveById(String) het acceptabel is dat de huidige thread wordt geblokkeerd zolang nieuwe berichten in de wachtrij blijven binnenkomen binnen de time-outperiode die is opgegeven door de timeout parameter. De thread wordt ten minste de opgegeven periode geblokkeerd, of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven, of als nieuwe berichten binnen de wachtrij blijven binnenkomen binnen de time-outperiode die is opgegeven door de timeout parameter.
Met twee andere methoden kunt u berichten van een wachtrij ontvangen. De Receive methode retourneert het eerste bericht in de wachtrij en de ReceiveByCorrelationId(String) methode wordt gebruikt om een bevestigings-, rapport- of door toepassing gegenereerd antwoordbericht op te halen dat is gemaakt als gevolg van een bericht dat naar de wachtrij is verzonden.
Als u een bericht met een opgegeven id wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de PeekById(String) methode. De PeekById(String) methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt.
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
ReceiveById(String, TimeSpan, MessageQueueTransaction)
Ontvangt het bericht dat overeenkomt met de opgegeven id (uit een transactionele wachtrij) en wacht totdat een bericht met de opgegeven id beschikbaar is in de wachtrij of de time-out verloopt.
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
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
- transaction
- MessageQueueTransaction
Het MessageQueueTransaction-object.
Retouren
De Message eigenschap waarvan Id de eigenschap overeenkomt met de id parameter die is doorgegeven.
Uitzonderingen
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht met de opgegeven id in de wachtrij binnengekomen voordat de time-out is verlopen.
– of –
De wachtrij is niet-transactioneel.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van 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();
}
Opmerkingen
Gebruik deze methode om een bericht met een bekende id te lezen en te verwijderen uit de wachtrij, met behulp van de interne transactiecontext die is gedefinieerd door de transaction parameter. Deze methode retourneert onmiddellijk als het bericht met de id die is opgegeven door de id parameter zich in de wachtrij bevindt. Anders wacht de methode de opgegeven periode totdat een nieuw bericht binnenkomt. Als er geen nieuw bericht binnenkomt voordat de time-out verloopt, wordt er een uitzondering gegenereerd.
De timeout parameter geeft de totale uitvoeringsduur voor deze methode niet op. In plaats daarvan geeft het de tijd op waarop moet worden gewacht tot een nieuw bericht in de wachtrij aankomt. Telkens wanneer een nieuw bericht binnenkomt, onderzoekt deze methode het Id nieuwe bericht om te zien of het overeenkomt met de id parameter. Zo niet, dan wordt met deze methode de time-outperiode gestart en wordt gewacht tot er een nieuw bericht binnenkomt. Als nieuwe berichten binnen de time-outperiode blijven binnenkomen, is het daarom mogelijk dat deze methode voor onbepaalde tijd wordt uitgevoerd, totdat de time-outperiode verloopt zonder dat er nieuwe berichten binnenkomen of totdat een bericht binnenkomt waarvan Id de id parameter overeenkomt.
De Id eigenschap van een bericht is uniek in de Enterprise Message Queuing, dus er zal maximaal één bericht in de wachtrij staan die overeenkomt met de opgegeven id parameter.
Gebruik deze overbelasting wanneer ReceiveById(String) het acceptabel is dat de huidige thread wordt geblokkeerd zolang nieuwe berichten in de wachtrij blijven binnenkomen binnen de time-outperiode die is opgegeven door de timeout parameter. De thread wordt ten minste de opgegeven periode geblokkeerd, of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven, of als nieuwe berichten binnen de wachtrij blijven binnenkomen binnen de time-outperiode die is opgegeven door de timeout parameter.
Omdat deze methode wordt aangeroepen in een transactionele wachtrij, wordt het ontvangen bericht geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Met twee andere methoden kunt u berichten van een wachtrij ontvangen. De Receive methode retourneert het eerste bericht in de wachtrij en de ReceiveByCorrelationId(String) methode wordt gebruikt om een bevestigings-, rapport- of door toepassing gegenereerd antwoordbericht op te halen dat is gemaakt als gevolg van een bericht dat naar de wachtrij is verzonden.
Als u een bericht met een opgegeven id wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de PeekById(String) methode. De PeekById(String) methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar PeekById(String). Omdat PeekById(String) er geen berichten in de wachtrij worden verwijderd, is er niets om terug te draaien als de transactie is afgebroken.
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |
Zie ook
Van toepassing op
ReceiveById(String, TimeSpan, MessageQueueTransactionType)
Ontvangt het bericht dat overeenkomt met de opgegeven id en wacht totdat een bericht met de opgegeven id beschikbaar is in de wachtrij of de time-out verloopt.
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
Parameters
- timeout
- TimeSpan
A TimeSpan die aangeeft hoe lang moet worden gewacht totdat een nieuw bericht beschikbaar is voor inspectie.
- transactionType
- MessageQueueTransactionType
Een van de MessageQueueTransactionType waarden die het type transactiecontext beschrijven dat aan het bericht moet worden gekoppeld.
Retouren
De Message eigenschap waarvan Id de eigenschap overeenkomt met de id parameter die is doorgegeven.
Uitzonderingen
De id parameter is null.
De opgegeven waarde voor de timeout parameter is ongeldig, mogelijk timeout kleiner dan Zero of groter dan InfiniteTimeout.
Er is geen bericht met de opgegeven id in de wachtrij binnengekomen voordat de time-out is verlopen.
– of –
Er is een fout opgetreden bij het openen van een Message Queuing-methode.
De transactionType parameter is geen van de MessageQueueTransactionType leden.
Voorbeelden
In het volgende codevoorbeeld ziet u het gebruik van 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);
Opmerkingen
Gebruik deze methode om een bericht met een bekende id te lezen en uit de wachtrij te verwijderen. Deze methode retourneert onmiddellijk als het bericht met de id die is opgegeven door de id parameter zich in de wachtrij bevindt, met behulp van een transactiecontext die is gedefinieerd door de transactionType parameter. Anders wacht de methode de opgegeven periode totdat een nieuw bericht binnenkomt. Als er geen nieuw bericht binnenkomt voordat de time-out verloopt, wordt er een uitzondering gegenereerd.
De timeout parameter geeft de totale uitvoeringsduur voor deze methode niet op. In plaats daarvan geeft het de tijd op waarop moet worden gewacht tot een nieuw bericht in de wachtrij aankomt. Telkens wanneer een nieuw bericht binnenkomt, onderzoekt deze methode het Id nieuwe bericht om te zien of het overeenkomt met de id parameter. Zo niet, dan wordt met deze methode de time-outperiode gestart en wordt gewacht tot er een nieuw bericht binnenkomt. Als nieuwe berichten binnen de time-outperiode blijven binnenkomen, is het daarom mogelijk dat deze methode voor onbepaalde tijd wordt uitgevoerd, totdat de time-outperiode verloopt zonder dat er nieuwe berichten binnenkomen of totdat een bericht binnenkomt waarvan Id de id parameter overeenkomt.
Geef Automatic op voor de transactionType parameter als er al een externe transactiecontext is gekoppeld aan de thread die u wilt gebruiken om het bericht te ontvangen. Geef op Single of u het bericht wilt ontvangen als één interne transactie. U kunt opgeven None of u een bericht wilt ontvangen van een transactionele wachtrij buiten een transactiecontext.
De Id eigenschap van een bericht is uniek in de Enterprise Message Queuing, dus er zal maximaal één bericht in de wachtrij staan die overeenkomt met de opgegeven id parameter. Als het bericht met de opgegeven id zich in een andere wachtrij bevindt dan het bericht dat aan dit MessageQueue exemplaar is gekoppeld, wordt het bericht niet gevonden.
Gebruik deze overbelasting wanneer ReceiveById(String) het acceptabel is dat de huidige thread wordt geblokkeerd zolang nieuwe berichten in de wachtrij blijven binnenkomen binnen de time-outperiode die is opgegeven door de timeout parameter. De thread wordt ten minste de opgegeven periode geblokkeerd, of voor onbepaalde tijd als u de waarde InfiniteTimeout voor de timeout parameter hebt opgegeven, of als nieuwe berichten binnen de wachtrij blijven binnenkomen binnen de time-outperiode die is opgegeven door de timeout parameter.
Als deze methode wordt aangeroepen om een bericht te ontvangen van een transactionele wachtrij, wordt het bericht dat wordt ontvangen, geretourneerd naar de wachtrij als de transactie wordt afgebroken. Het bericht wordt pas definitief uit de wachtrij verwijderd nadat de transactie is doorgevoerd.
Met twee andere methoden kunt u berichten van een wachtrij ontvangen. De Receive methode retourneert het eerste bericht in de wachtrij en de ReceiveByCorrelationId(String) methode wordt gebruikt om een bevestigings-, rapport- of door toepassing gegenereerd antwoordbericht op te halen dat is gemaakt als gevolg van een bericht dat naar de wachtrij is verzonden.
Als u een bericht met een opgegeven id wilt lezen zonder het uit de wachtrij te verwijderen, gebruikt u de PeekById(String) methode. De PeekById(String) methode retourneert altijd het eerste bericht in de wachtrij, zodat volgende aanroepen naar de methode hetzelfde bericht retourneren, tenzij een bericht met een hogere prioriteit in de wachtrij binnenkomt. Er is geen transactiecontext gekoppeld aan een bericht dat wordt geretourneerd door een aanroep naar PeekById(String). Omdat PeekById(String) er geen berichten in de wachtrij worden verwijderd, is er niets om terug te draaien als de transactie is afgebroken.
In de volgende tabel ziet u of deze methode beschikbaar is in verschillende werkgroepmodi.
| Werkgroepmodus | Available |
|---|---|
| Lokale computer | Ja |
| Naam van lokale computer en directe indeling | Ja |
| Externe computer | No |
| Naam van externe computer en directe indeling | Ja |