Freigeben über


MessageQueue.ReceiveById Methode

Definition

Empfängt die Meldung mit der angegebenen ID und entfernt sie aus der Warteschlange.

Überlädt

ReceiveById(String)

Empfängt die Meldung mit der angegebenen ID aus einer nicht transaktionalen Warteschlange und löst sofort eine Ausnahme aus, wenn sich derzeit keine Meldung mit der angegebenen ID in der Warteschlange befindet.

ReceiveById(String, MessageQueueTransaction)

Empfängt die Meldung mit der angegebenen ID (aus einer transaktionalen Warteschlange) und löst sofort eine Ausnahme aus, wenn sich derzeit keine Meldung mit der angegebenen ID in der Warteschlange befindet.

ReceiveById(String, MessageQueueTransactionType)

Empfängt die Meldung mit der angegebenen ID und löst sofort eine Ausnahme aus, wenn sich derzeit keine Meldung mit der angegebenen ID in der Warteschlange befindet.

ReceiveById(String, TimeSpan)

Empfängt die Meldung mit der angegebenen ID (aus einer nicht transaktionalen Warteschlange) und wartet, bis eine Meldung mit der angegebenen ID in der Warteschlange verfügbar ist oder das Timeout abläuft.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Empfängt die Meldung mit der angegebenen ID (aus einer transaktionalen Warteschlange) und wartet, bis eine Meldung mit der angegebenen ID in der Warteschlange verfügbar ist oder das Timeout abläuft.

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Empfängt die Meldung mit der angegebenen ID und wartet, bis eine Meldung mit der angegebenen ID in der Warteschlange verfügbar ist oder das Timeout abläuft.

ReceiveById(String)

Empfängt die Meldung mit der angegebenen ID aus einer nicht transaktionalen Warteschlange und löst sofort eine Ausnahme aus, wenn sich derzeit keine Meldung mit der angegebenen ID in der Warteschlange befindet.

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

Parameter

id
String

Die Id der zu empfangenden Meldung.

Gibt zurück

Die Message, deren Id-Eigenschaft dem übergebenen id-Parameter entspricht.

Ausnahmen

Der id-Parameter ist null.

Die Meldung mit der angegebenen id wurde nicht gefunden.

Fehler beim Zugriff auf eine Message Queuing-Methode.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung von 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);

Hinweise

Verwenden Sie diese Methode, um eine Nachricht mit einem bekannten Bezeichner zu lesen und aus der Warteschlange zu entfernen. Diese Methode löst sofort eine Ausnahme aus, wenn sich die Nachricht nicht in der Warteschlange befindet.

Die Id Eigenschaft einer Nachricht ist im gesamten Message Queuing-Unternehmen eindeutig, sodass sich maximal eine Nachricht in der Warteschlange befindet, die dem angegebenen id Parameter entspricht.

Mit zwei anderen Methoden können Sie Nachrichten aus einer Warteschlange empfangen. Die Receive -Methode gibt die erste Nachricht in der Warteschlange zurück, und die ReceiveByCorrelationId(String) -Methode wird verwendet, um eine Bestätigungs-, Berichts- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer nachricht erstellt wurde, die an die Warteschlange gesendet wurde.

Verwenden Sie die PeekById(String) -Methode, um eine Nachricht mit einem angegebenen Bezeichner zu lesen, ohne sie aus der Warteschlange zu entfernen. Die PeekById(String) -Methode gibt immer die erste Nachricht in der Warteschlange zurück, sodass nachfolgende Aufrufe der -Methode dieselbe Nachricht zurückgeben, es sei denn, eine Nachricht mit höherer Priorität wird in der Warteschlange eintreffen.

Die folgende Tabelle zeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokalem Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer Nein
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, MessageQueueTransaction)

Empfängt die Meldung mit der angegebenen ID (aus einer transaktionalen Warteschlange) und löst sofort eine Ausnahme aus, wenn sich derzeit keine Meldung mit der angegebenen ID in der Warteschlange befindet.

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

Parameter

id
String

Die Id der zu empfangenden Meldung.

Gibt zurück

Die Message, deren Id-Eigenschaft dem übergebenen id-Parameter entspricht.

Ausnahmen

Der id-Parameter ist null.

- oder -

Der transaction-Parameter ist null.

Die Meldung mit der angegebenen id wurde nicht gefunden.

Die Warteschlange ist nicht transaktional.

- oder -

Fehler beim Zugriff auf eine Message Queuing-Methode.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung von 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();
}

Hinweise

Verwenden Sie diese Methode, um eine Nachricht mit einem bekannten Bezeichner zu lesen und sie mithilfe des internen Transaktionskontexts, der durch den Parameter definiert wird, aus der transaction Warteschlange zu entfernen. Diese Methode löst sofort eine Ausnahme aus, wenn sich die Nachricht nicht in der Warteschlange befindet.

Die Id Eigenschaft einer Nachricht ist im gesamten Message Queuing-Unternehmen eindeutig, sodass sich maximal eine Nachricht in der Warteschlange befindet, die dem angegebenen id Parameter entspricht.

Da diese Methode in einer Transaktionswarteschlange aufgerufen wird, wird die empfangene Nachricht an die Warteschlange zurückgegeben, wenn die Transaktion abgebrochen wird. Die Nachricht wird erst endgültig aus der Warteschlange entfernt, wenn die Transaktion zu einem Commit verpflichtet wurde.

Mit zwei anderen Methoden können Sie Nachrichten aus einer Warteschlange empfangen. Die Receive -Methode gibt die erste Nachricht in der Warteschlange zurück, und die ReceiveByCorrelationId(String) -Methode wird verwendet, um eine Bestätigungs-, Berichts- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer nachricht erstellt wurde, die an die Warteschlange gesendet wurde.

Verwenden Sie die PeekById(String) -Methode, um eine Nachricht mit einem angegebenen Bezeichner zu lesen, ohne sie aus der Warteschlange zu entfernen. Die PeekById(String) -Methode gibt immer die erste Nachricht in der Warteschlange zurück, sodass nachfolgende Aufrufe der -Methode dieselbe Nachricht zurückgeben, es sei denn, eine Nachricht mit höherer Priorität wird in der Warteschlange eintreffen. Einer Nachricht, die von einem Aufruf PeekById(String)von zurückgegeben wird, ist kein Transaktionskontext zugeordnet. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, gäbe es kein Rollback, wenn die Transaktion abgebrochen würde.

Die folgende Tabelle zeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokalem Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer Nein
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, MessageQueueTransactionType)

Empfängt die Meldung mit der angegebenen ID und löst sofort eine Ausnahme aus, wenn sich derzeit keine Meldung mit der angegebenen ID in der Warteschlange befindet.

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

Parameter

id
String

Die Id der zu empfangenden Meldung.

transactionType
MessageQueueTransactionType

Einer der MessageQueueTransactionType-Werte, der den Typ des Transaktionskontexts beschreibt, der der Meldung zugeordnet werden soll.

Gibt zurück

Die Message, deren Id-Eigenschaft dem übergebenen id-Parameter entspricht.

Ausnahmen

Der id-Parameter ist null.

Die Meldung mit der angegebenen id wurde nicht gefunden.

Der transactionType-Parameter ist keiner der MessageQueueTransactionType-Member.

Fehler beim Zugriff auf eine Message Queuing-Methode.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung von 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);

Hinweise

Verwenden Sie diese Methode, um eine Nachricht mit einem bekannten Bezeichner zu lesen und aus der Warteschlange zu entfernen. Diese Methode löst sofort eine Ausnahme aus, wenn sich die Nachricht nicht in der Warteschlange befindet. Andernfalls wird die Nachricht aus der Warteschlange entfernt und mithilfe eines durch den Parameter definierten Transaktionskontexts an die transactionType Anwendung zurückgegeben.

Geben Sie Automatic für den transactionType Parameter an, wenn bereits ein externer Transaktionskontext an den Thread angefügt ist, den Sie zum Empfangen der Nachricht verwenden möchten. Geben Sie an Single , ob Sie die Nachricht als einzelne interne Transaktion empfangen möchten. Sie können angeben None , ob Sie eine Nachricht von einer Transaktionswarteschlange außerhalb eines Transaktionskontexts empfangen möchten.

Die Id Eigenschaft einer Nachricht ist im gesamten Message Queuing-Unternehmen eindeutig, sodass sich maximal eine Nachricht in der Warteschlange befindet, die dem angegebenen id Parameter entspricht. Wenn sich die Nachricht mit dem angegebenen Bezeichner in einer anderen als der Warteschlange befindet, die diesem MessageQueue instance zugeordnet ist, wird die Nachricht nicht gefunden.

Wenn diese Methode aufgerufen wird, um eine Nachricht von einer Transaktionswarteschlange zu empfangen, wird die empfangene Nachricht an die Warteschlange zurückgegeben, wenn die Transaktion abgebrochen wird. Die Nachricht wird erst endgültig aus der Warteschlange entfernt, wenn die Transaktion zu einem Commit verpflichtet wurde.

Mit zwei anderen Methoden können Sie Nachrichten aus einer Warteschlange empfangen. Die Receive -Methode gibt die erste Nachricht in der Warteschlange zurück, und die ReceiveByCorrelationId(String) -Methode wird verwendet, um eine Bestätigungs-, Berichts- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer nachricht erstellt wurde, die an die Warteschlange gesendet wurde.

Verwenden Sie die PeekById(String) -Methode, um eine Nachricht mit einem angegebenen Bezeichner zu lesen, ohne sie aus der Warteschlange zu entfernen. Die PeekById(String) -Methode gibt immer die erste Nachricht in der Warteschlange zurück, sodass nachfolgende Aufrufe der -Methode dieselbe Nachricht zurückgeben, es sei denn, eine Nachricht mit höherer Priorität wird in der Warteschlange eintreffen. Einer Nachricht, die von einem Aufruf PeekById(String)von zurückgegeben wird, ist kein Transaktionskontext zugeordnet. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, gäbe es kein Rollback, wenn die Transaktion abgebrochen würde.

Die folgende Tabelle zeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokalem Computer Ja
Name des lokalen Computers und direktes Format Ja
Remotecomputer Nein
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, TimeSpan)

Empfängt die Meldung mit der angegebenen ID (aus einer nicht transaktionalen Warteschlange) und wartet, bis eine Meldung mit der angegebenen ID in der Warteschlange verfügbar ist oder das Timeout abläuft.

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

Parameter

id
String

Die Id der zu empfangenden Meldung.

timeout
TimeSpan

Eine TimeSpan, die die Zeitspanne angibt, für die auf den Eingang einer neuen Meldung zur Überprüfung gewartet werden soll.

Gibt zurück

Die Message, deren Id-Eigenschaft dem übergebenen id-Parameter entspricht.

Ausnahmen

Der id-Parameter ist null.

Der für den timeout-Parameter angegebene Wert ist ungültig. Möglicherweise ist der timeout kleiner als Zero oder größer als der InfiniteTimeout.

Vor Ablauf des Timeouts ist keine Meldung mit der angegebenen id in die Warteschlange eingegangen.

- oder -

Fehler beim Zugriff auf eine Message Queuing-Methode.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung von 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));

Hinweise

Verwenden Sie diese Methode, um eine Nachricht mit einem bekannten Bezeichner zu lesen und aus der Warteschlange zu entfernen. Diese Methode gibt sofort zurück, wenn sich die Nachricht mit dem durch den id Parameter angegebenen Bezeichner in der Warteschlange befindet. Andernfalls wartet die -Methode den angegebenen Zeitraum, bis eine neue Nachricht eingeht. Wenn eine neue Nachricht nicht eingeht, bevor das Timeout abläuft, wird eine Ausnahme ausgelöst.

Der timeout Parameter gibt nicht die Gesamtlaufzeit für diese Methode an. Stattdessen wird die Zeit angegeben, in der auf das Eintreffen einer neuen Nachricht in der Warteschlange gewartet wird. Jedes Mal, wenn eine neue Nachricht eingeht, untersucht diese Methode die Id der neuen Nachricht, um festzustellen, ob sie mit dem id Parameter übereinstimmt. Wenn dies nicht der Fall ist, beginnt diese Methode mit dem Timeoutzeitraum und wartet darauf, dass eine weitere neue Nachricht eingeht. Wenn also neue Nachrichten weiterhin innerhalb des Timeoutzeitraums eingehen, kann diese Methode unbegrenzt weiter ausgeführt werden, entweder bis der Timeoutzeitraum abläuft, ohne dass neue Nachrichten eingehen, oder bis eine Nachricht eingeht, deren Idid Parameter entspricht.

Die Id Eigenschaft einer Nachricht ist im gesamten Message Queuing-Unternehmen eindeutig, sodass in der Warteschlange höchstens eine Nachricht vorhanden ist, die dem angegebenen id Parameter entspricht.

Verwenden Sie diese Überladung von ReceiveById(String) , wenn es akzeptabel ist, dass der aktuelle Thread blockiert wird, solange neue Nachrichten innerhalb des durch den Parameter angegebenen Timeoutzeitraums weiterhin in der timeout Warteschlange eingehen. Der Thread wird mindestens für den angegebenen Zeitraum oder unbegrenzt blockiert, wenn Sie den Wert InfiniteTimeout für den timeout Parameter angegeben haben oder wenn neue Nachrichten weiterhin innerhalb des durch den Parameter angegebenen Timeoutzeitraums in der timeout Warteschlange eingehen.

Mit zwei anderen Methoden können Sie Nachrichten aus einer Warteschlange empfangen. Die Receive -Methode gibt die erste Nachricht in der Warteschlange zurück, und die ReceiveByCorrelationId(String) -Methode wird verwendet, um eine bestätigungs-, berichts- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt wurde.

Verwenden Sie die -Methode, um eine Nachricht mit einem angegebenen Bezeichner zu lesen, ohne sie aus der PeekById(String) Warteschlange zu entfernen. Die PeekById(String) -Methode gibt immer die erste Nachricht in der Warteschlange zurück, sodass nachfolgende Aufrufe der -Methode dieselbe Nachricht zurückgeben, es sei denn, eine Nachricht mit höherer Priorität wird in der Warteschlange eingetroffen.

Die folgende Tabelle zeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokalem Computer Ja
Name des lokalen Computers und direktes Format Ja
Remotecomputer Nein
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Empfängt die Meldung mit der angegebenen ID (aus einer transaktionalen Warteschlange) und wartet, bis eine Meldung mit der angegebenen ID in der Warteschlange verfügbar ist oder das Timeout abläuft.

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

Parameter

id
String

Die Id der zu empfangenden Meldung.

timeout
TimeSpan

Eine TimeSpan, die die Zeitspanne angibt, für die auf den Eingang einer neuen Meldung zur Überprüfung gewartet werden soll.

Gibt zurück

Die Message, deren Id-Eigenschaft dem übergebenen id-Parameter entspricht.

Ausnahmen

Der id-Parameter ist null.

- oder -

Der transaction-Parameter ist null.

Der für den timeout-Parameter angegebene Wert ist ungültig. Möglicherweise ist der timeout kleiner als Zero oder größer als der InfiniteTimeout.

Vor Ablauf des Timeouts ist keine Meldung mit der angegebenen id in die Warteschlange eingegangen.

- oder -

Die Warteschlange ist nicht transaktional.

- oder -

Fehler beim Zugriff auf eine Message Queuing-Methode.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung von 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();
}

Hinweise

Verwenden Sie diese Methode, um eine Nachricht mit einem bekannten Bezeichner zu lesen und aus der Warteschlange zu entfernen, indem Sie den durch den transaction Parameter definierten internen Transaktionskontext verwenden. Diese Methode gibt sofort zurück, wenn sich die Nachricht mit dem durch den id Parameter angegebenen Bezeichner in der Warteschlange befindet. Andernfalls wartet die -Methode den angegebenen Zeitraum, bis eine neue Nachricht eingeht. Wenn eine neue Nachricht nicht eingeht, bevor das Timeout abläuft, wird eine Ausnahme ausgelöst.

Der timeout Parameter gibt nicht die Gesamtlaufzeit für diese Methode an. Stattdessen wird die Zeit angegeben, in der auf das Eintreffen einer neuen Nachricht in der Warteschlange gewartet wird. Jedes Mal, wenn eine neue Nachricht eingeht, untersucht diese Methode die Id der neuen Nachricht, um festzustellen, ob sie mit dem id Parameter übereinstimmt. Wenn dies nicht der Fall ist, beginnt diese Methode mit dem Timeoutzeitraum und wartet darauf, dass eine weitere neue Nachricht eingeht. Wenn also neue Nachrichten weiterhin innerhalb des Timeoutzeitraums eingehen, kann diese Methode unbegrenzt weiter ausgeführt werden, entweder bis der Timeoutzeitraum abläuft, ohne dass neue Nachrichten eingehen, oder bis eine Nachricht eingeht, deren Idid Parameter entspricht.

Die Id Eigenschaft einer Nachricht ist im gesamten Message Queuing-Unternehmen eindeutig, sodass in der Warteschlange höchstens eine Nachricht vorhanden ist, die dem angegebenen id Parameter entspricht.

Verwenden Sie diese Überladung von ReceiveById(String) , wenn es akzeptabel ist, dass der aktuelle Thread blockiert wird, solange neue Nachrichten innerhalb des durch den Parameter angegebenen Timeoutzeitraums weiterhin in der timeout Warteschlange eingehen. Der Thread wird mindestens für den angegebenen Zeitraum oder auf unbestimmte Zeit blockiert, wenn Sie den Wert InfiniteTimeout für den timeout Parameter angegeben haben oder wenn neue Nachrichten weiterhin innerhalb des durch den Parameter angegebenen Timeoutzeitraums in der timeout Warteschlange eingehen.

Da diese Methode in einer Transaktionswarteschlange aufgerufen wird, wird die empfangene Nachricht an die Warteschlange zurückgegeben, wenn die Transaktion abgebrochen wird. Die Nachricht wird erst endgültig aus der Warteschlange entfernt, wenn ein Commit für die Transaktion ausgeführt wird.

Mit zwei anderen Methoden können Sie Nachrichten aus einer Warteschlange empfangen. Die Receive -Methode gibt die erste Nachricht in der Warteschlange zurück, und die ReceiveByCorrelationId(String) -Methode wird verwendet, um eine bestätigungs-, berichts- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt wurde.

Verwenden Sie die -Methode, um eine Nachricht mit einem angegebenen Bezeichner zu lesen, ohne sie aus der PeekById(String) Warteschlange zu entfernen. Die PeekById(String) -Methode gibt immer die erste Nachricht in der Warteschlange zurück, sodass nachfolgende Aufrufe der -Methode dieselbe Nachricht zurückgeben, es sei denn, eine Nachricht mit höherer Priorität wird in der Warteschlange eingetroffen. Es gibt keinen Transaktionskontext, der einer Nachricht zugeordnet ist, die von einem Aufruf PeekById(String)von zurückgegeben wird. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, würde kein Rollback durchgeführt, wenn die Transaktion abgebrochen würde.

Die folgende Tabelle zeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokalem Computer Ja
Name des lokalen Computers und direktes Format Ja
Remotecomputer Nein
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Empfängt die Meldung mit der angegebenen ID und wartet, bis eine Meldung mit der angegebenen ID in der Warteschlange verfügbar ist oder das Timeout abläuft.

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

Parameter

id
String

Die Id der zu empfangenden Meldung.

timeout
TimeSpan

Eine TimeSpan, die die Zeitspanne angibt, für die auf den Eingang einer neuen Meldung zur Überprüfung gewartet werden soll.

transactionType
MessageQueueTransactionType

Einer der MessageQueueTransactionType-Werte, der den Typ des Transaktionskontexts beschreibt, der der Meldung zugeordnet werden soll.

Gibt zurück

Die Message, deren Id-Eigenschaft dem übergebenen id-Parameter entspricht.

Ausnahmen

Der id-Parameter ist null.

Der für den timeout-Parameter angegebene Wert ist ungültig. Möglicherweise ist der timeout kleiner als Zero oder größer als der InfiniteTimeout.

Vor Ablauf des Timeouts ist keine Meldung mit der angegebenen id in die Warteschlange eingegangen.

- oder -

Fehler beim Zugriff auf eine Message Queuing-Methode.

Der transactionType-Parameter ist keiner der MessageQueueTransactionType-Member.

Beispiele

Das folgende Codebeispiel veranschaulicht die Verwendung von 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);

Hinweise

Verwenden Sie diese Methode, um eine Nachricht mit einem bekannten Bezeichner zu lesen und aus der Warteschlange zu entfernen. Diese Methode gibt sofort zurück, wenn sich die Nachricht mit dem durch den id Parameter angegebenen Bezeichner in der Warteschlange befindet, wobei ein durch den transactionType Parameter definierter Transaktionskontext verwendet wird. Andernfalls wartet die -Methode den angegebenen Zeitraum, bis eine neue Nachricht eingeht. Wenn eine neue Nachricht nicht eingeht, bevor das Timeout abläuft, wird eine Ausnahme ausgelöst.

Der timeout Parameter gibt nicht die Gesamtlaufzeit für diese Methode an. Es gibt vielmehr die Zeit an, bis eine neue Nachricht in der Warteschlange eintrifft. Jedes Mal, wenn eine neue Nachricht eingeht, untersucht diese Methode die Id der neuen Nachricht, um festzustellen, ob sie mit dem id Parameter übereinstimmt. Andernfalls beginnt diese Methode mit dem Timeout und wartet, bis eine weitere neue Nachricht eingeht. Wenn also neue Nachrichten weiterhin innerhalb des Timeoutzeitraums eintreffen, ist es möglich, dass diese Methode unbegrenzt weiter ausgeführt wird, bis der Timeoutzeitraum abläuft, ohne dass neue Nachrichten eintreffen, oder bis eine Nachricht eingeht, deren Idid Parameter entspricht.

Geben Sie Automatic für den transactionType Parameter an, wenn bereits ein externer Transaktionskontext an den Thread angefügt ist, den Sie zum Empfangen der Nachricht verwenden möchten. Geben Sie an Single , ob Sie die Nachricht als einzelne interne Transaktion empfangen möchten. Sie können angeben None , ob Sie eine Nachricht von einer Transaktionswarteschlange außerhalb eines Transaktionskontexts empfangen möchten.

Die Id Eigenschaft einer Nachricht ist im gesamten Message Queuing-Unternehmen eindeutig, sodass sich maximal eine Nachricht in der Warteschlange befindet, die dem angegebenen id Parameter entspricht. Wenn sich die Nachricht mit dem angegebenen Bezeichner in einer anderen als der Warteschlange befindet, die diesem MessageQueue instance zugeordnet ist, wird die Nachricht nicht gefunden.

Verwenden Sie diese Überladung von ReceiveById(String) , wenn es akzeptabel ist, dass der aktuelle Thread blockiert wird, solange neue Nachrichten innerhalb des vom Parameter angegebenen Timeoutzeitraums weiterhin in der timeout Warteschlange eintreffen. Der Thread wird mindestens für den angegebenen Zeitraum oder unbegrenzt blockiert, wenn Sie den Wert InfiniteTimeout für den timeout Parameter angegeben haben oder wenn neue Nachrichten weiterhin innerhalb des vom Parameter angegebenen Timeoutzeitraums in der timeout Warteschlange eingehen.

Wenn diese Methode aufgerufen wird, um eine Nachricht von einer Transaktionswarteschlange zu empfangen, wird die empfangene Nachricht an die Warteschlange zurückgegeben, wenn die Transaktion abgebrochen wird. Die Nachricht wird erst endgültig aus der Warteschlange entfernt, wenn die Transaktion zu einem Commit verpflichtet wurde.

Mit zwei anderen Methoden können Sie Nachrichten aus einer Warteschlange empfangen. Die Receive -Methode gibt die erste Nachricht in der Warteschlange zurück, und die ReceiveByCorrelationId(String) -Methode wird verwendet, um eine Bestätigungs-, Berichts- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer nachricht erstellt wurde, die an die Warteschlange gesendet wurde.

Verwenden Sie die PeekById(String) -Methode, um eine Nachricht mit einem angegebenen Bezeichner zu lesen, ohne sie aus der Warteschlange zu entfernen. Die PeekById(String) -Methode gibt immer die erste Nachricht in der Warteschlange zurück, sodass nachfolgende Aufrufe der -Methode dieselbe Nachricht zurückgeben, es sei denn, eine Nachricht mit höherer Priorität wird in der Warteschlange eintreffen. Einer Nachricht, die von einem Aufruf PeekById(String)von zurückgegeben wird, ist kein Transaktionskontext zugeordnet. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, gäbe es kein Rollback, wenn die Transaktion abgebrochen würde.

Die folgende Tabelle zeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokalem Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer Nein
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für: