Freigeben über


MessageQueue.ReceiveById Methode

Definition

Empfängt die Nachricht, die dem angegebenen Bezeichner entspricht, und entfernt sie aus der Warteschlange.

Überlädt

Name Beschreibung
ReceiveById(String)

Empfängt die Nachricht, die dem angegebenen Bezeichner aus einer nicht transaktionsbezogenen Warteschlange entspricht, und löst sofort eine Ausnahme aus, wenn keine Nachricht mit dem angegebenen Bezeichner derzeit in der Warteschlange vorhanden ist.

ReceiveById(String, MessageQueueTransaction)

Empfängt die Nachricht, die dem angegebenen Bezeichner (aus einer Transaktionswarteschlange) entspricht, und löst sofort eine Ausnahme aus, wenn keine Nachricht mit dem angegebenen Bezeichner derzeit in der Warteschlange vorhanden ist.

ReceiveById(String, MessageQueueTransactionType)

Empfängt die Nachricht, die dem angegebenen Bezeichner entspricht, und löst sofort eine Ausnahme aus, wenn in der Warteschlange derzeit keine Nachricht mit dem angegebenen Bezeichner vorhanden ist.

ReceiveById(String, TimeSpan)

Empfängt die Nachricht, die dem angegebenen Bezeichner entspricht (aus einer nicht transaktionsbezogenen Warteschlange), und wartet, bis eine Nachricht mit dem angegebenen Bezeichner in der Warteschlange verfügbar ist oder das Timeout abläuft.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Empfängt die Nachricht, die dem angegebenen Bezeichner (aus einer Transaktionswarteschlange) entspricht, und wartet, bis eine Nachricht mit dem angegebenen Bezeichner in der Warteschlange verfügbar ist oder das Timeout abläuft.

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

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

ReceiveById(String)

Empfängt die Nachricht, die dem angegebenen Bezeichner aus einer nicht transaktionsbezogenen Warteschlange entspricht, und löst sofort eine Ausnahme aus, wenn keine Nachricht mit dem angegebenen Bezeichner derzeit in der Warteschlange vorhanden ist.

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 nachricht, die empfangen werden soll.

Gibt zurück

Die Message Eigenschaft, deren Eigenschaft mit dem id übergebenen Id Parameter übereinstimmt.

Ausnahmen

Der id Parameter ist null.

Die Nachricht mit der angegebenen id Nachricht 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 für das Message Queuing-Unternehmen eindeutig, sodass es höchstens eine Nachricht in der Warteschlange gibt, 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-, Bericht- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt 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.

In der folgenden Tabelle wird gezeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokaler Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer No
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, MessageQueueTransaction)

Empfängt die Nachricht, die dem angegebenen Bezeichner (aus einer Transaktionswarteschlange) entspricht, und löst sofort eine Ausnahme aus, wenn keine Nachricht mit dem angegebenen Bezeichner derzeit in der Warteschlange vorhanden ist.

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 nachricht, die empfangen werden soll.

Gibt zurück

Die Message Eigenschaft, deren Eigenschaft mit dem id übergebenen Id Parameter übereinstimmt.

Ausnahmen

Der id Parameter ist null.

- oder -

Der transaction Parameter ist null.

Die Nachricht mit der angegebenen id Nachricht wurde nicht gefunden.

Die Warteschlange ist nicht transaktionsfrei.

- 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 aus der Warteschlange zu entfernen, indem Sie den internen Transaktionskontext verwenden, der durch den transaction Parameter definiert ist. Diese Methode löst sofort eine Ausnahme aus, wenn sich die Nachricht nicht in der Warteschlange befindet.

Die Id Eigenschaft einer Nachricht ist für das Message Queuing-Unternehmen eindeutig, sodass es höchstens eine Nachricht in der Warteschlange gibt, die dem angegebenen id Parameter entspricht.

Da diese Methode für eine 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 zugesichert 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-, Bericht- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt 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. Es ist kein Transaktionskontext mit einer Nachricht verknüpft, die von einem Aufruf an PeekById(String)zurückgegeben wird. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, wäre kein Rollback erforderlich, wenn die Transaktion abgebrochen wurde.

In der folgenden Tabelle wird gezeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokaler Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer No
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, MessageQueueTransactionType)

Empfängt die Nachricht, die dem angegebenen Bezeichner entspricht, und löst sofort eine Ausnahme aus, wenn in der Warteschlange derzeit keine Nachricht mit dem angegebenen Bezeichner vorhanden ist.

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 nachricht, die empfangen werden soll.

transactionType
MessageQueueTransactionType

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

Gibt zurück

Die Message Eigenschaft, deren Eigenschaft mit dem id übergebenen Id Parameter übereinstimmt.

Ausnahmen

Der id Parameter ist null.

Die Nachricht mit der angegebenen id Nachricht wurde nicht gefunden.

Der transactionType Parameter ist keins 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 transactionType Parameter definierten Transaktionskontexts an die Anwendung zurückgegeben.

Geben Sie Automatic für den transactionType Parameter an, wenn bereits ein externer Transaktionskontext mit dem Thread verknüpft 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 aus einer Transaktionswarteschlange außerhalb eines Transaktionskontexts empfangen möchten.

Die Id Eigenschaft einer Nachricht ist für das Message Queuing-Unternehmen eindeutig, sodass es höchstens eine Nachricht in der Warteschlange gibt, die dem angegebenen id Parameter entspricht. Wenn sich die Nachricht mit dem angegebenen Bezeichner in einer anderen Warteschlange als der nachricht befindet, die dieser MessageQueue Instanz zugeordnet ist, wird die Nachricht nicht gefunden.

Wenn diese Methode aufgerufen wird, um eine Nachricht aus 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 zugesichert 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-, Bericht- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt 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. Es ist kein Transaktionskontext mit einer Nachricht verknüpft, die von einem Aufruf an PeekById(String)zurückgegeben wird. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, wäre kein Rollback erforderlich, wenn die Transaktion abgebrochen wurde.

In der folgenden Tabelle wird gezeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokaler Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer No
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, TimeSpan)

Empfängt die Nachricht, die dem angegebenen Bezeichner entspricht (aus einer nicht transaktionsbezogenen Warteschlange), und wartet, bis eine Nachricht mit dem angegebenen Bezeichner 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 nachricht, die empfangen werden soll.

timeout
TimeSpan

A TimeSpan that indicates the time to wait until a new message is available for inspection.

Gibt zurück

Die Message Eigenschaft, deren Eigenschaft mit dem id übergebenen Id Parameter übereinstimmt.

Ausnahmen

Der id Parameter ist null.

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

Eine Nachricht mit dem angegebenen id Wurde nicht in der Warteschlange vor Ablauf des Timeouts eingetroffen.

- 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 vor Ablauf des Timeouts eingeht, wird eine Ausnahme ausgelöst.

Der timeout Parameter gibt nicht die Gesamtlaufzeit für diese Methode an. Stattdessen wird die Zeit angegeben, bis eine neue Nachricht in der Warteschlange eingetroffen ist. Jedes Mal, wenn eine neue Nachricht eingeht, überprüft diese Methode die Id neue Nachricht, um festzustellen, ob sie mit dem id Parameter übereinstimmt. Wenn dies nicht der Fall ist, beginnt diese Methode den Timeoutzeitraum, und wartet auf das Eintreffen einer anderen neuen Nachricht. Wenn also neue Nachrichten innerhalb des Timeoutzeitraums weiterhin eingehen, ist es möglich, dass diese Methode unbegrenzt weiter ausgeführt wird, entweder bis der Timeoutzeitraum abläuft, ohne dass neue Nachrichten eingehen, oder bis eine Nachricht eingeht, deren Id Übereinstimmung mit dem id Parameter übereinstimmt.

Die Id Eigenschaft einer Nachricht ist für das Message Queuing-Unternehmen eindeutig, sodass es höchstens eine Nachricht in der Warteschlange gibt, die dem angegebenen id Parameter entspricht.

Verwenden Sie diese Überladung, ReceiveById(String) wenn sie für den aktuellen Thread blockiert werden kann, solange neue Nachrichten innerhalb des durch den timeout Parameter angegebenen Timeoutzeitraums weiterhin in der Warteschlange eingehen. Der Thread wird mindestens für den angegebenen Zeitraum oder unbegrenzt blockiert, wenn Sie den Wert für den timeout Parameter InfiniteTimeout angegeben haben, oder wenn neue Nachrichten innerhalb des durch den timeout Parameter angegebenen Timeoutzeitraums weiterhin in der 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-, Bericht- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt 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.

In der folgenden Tabelle wird gezeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokaler Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer No
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Empfängt die Nachricht, die dem angegebenen Bezeichner (aus einer Transaktionswarteschlange) entspricht, und wartet, bis eine Nachricht mit dem angegebenen Bezeichner 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 nachricht, die empfangen werden soll.

timeout
TimeSpan

A TimeSpan that indicates the time to wait until a new message is available for inspection.

Gibt zurück

Die Message Eigenschaft, deren Eigenschaft mit dem id übergebenen Id Parameter übereinstimmt.

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 timeout kleiner oder Zero größer als InfiniteTimeout.

Eine Nachricht mit dem angegebenen id Wurde nicht in der Warteschlange vor Ablauf des Timeouts eingetroffen.

- oder -

Die Warteschlange ist nicht transaktionsfrei.

- 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 internen Transaktionskontext verwenden, der durch den transaction Parameter definiert ist. 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 vor Ablauf des Timeouts eingeht, wird eine Ausnahme ausgelöst.

Der timeout Parameter gibt nicht die Gesamtlaufzeit für diese Methode an. Stattdessen wird die Zeit angegeben, bis eine neue Nachricht in der Warteschlange eingetroffen ist. Jedes Mal, wenn eine neue Nachricht eingeht, überprüft diese Methode die Id neue Nachricht, um festzustellen, ob sie mit dem id Parameter übereinstimmt. Wenn dies nicht der Fall ist, beginnt diese Methode den Timeoutzeitraum, und wartet auf das Eintreffen einer anderen neuen Nachricht. Wenn also neue Nachrichten innerhalb des Timeoutzeitraums weiterhin eingehen, ist es möglich, dass diese Methode unbegrenzt weiter ausgeführt wird, entweder bis der Timeoutzeitraum abläuft, ohne dass neue Nachrichten eingehen, oder bis eine Nachricht eingeht, deren Id Übereinstimmung mit dem id Parameter übereinstimmt.

Die Id Eigenschaft einer Nachricht ist für das Message Queuing-Unternehmen eindeutig, sodass es höchstens eine Nachricht in der Warteschlange gibt, die dem angegebenen id Parameter entspricht.

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

Da diese Methode für eine 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 zugesichert 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-, Bericht- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt 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. Es ist kein Transaktionskontext mit einer Nachricht verknüpft, die von einem Aufruf an PeekById(String)zurückgegeben wird. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, wäre kein Rollback erforderlich, wenn die Transaktion abgebrochen wurde.

In der folgenden Tabelle wird gezeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokaler Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer No
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für:

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Empfängt die Nachricht, die dem angegebenen Bezeichner entspricht, und wartet, bis eine Nachricht mit dem angegebenen Bezeichner 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 nachricht, die empfangen werden soll.

timeout
TimeSpan

A TimeSpan that indicates the time to wait until a new message is available for inspection.

transactionType
MessageQueueTransactionType

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

Gibt zurück

Die Message Eigenschaft, deren Eigenschaft mit dem id übergebenen Id Parameter übereinstimmt.

Ausnahmen

Der id Parameter ist null.

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

Eine Nachricht mit dem angegebenen id Wurde nicht in der Warteschlange vor Ablauf des Timeouts eingetroffen.

- oder -

Fehler beim Zugriff auf eine Message Queuing-Methode.

Der transactionType Parameter ist keins 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 vom transactionType Parameter definierter Transaktionskontext verwendet wird. Andernfalls wartet die Methode den angegebenen Zeitraum, bis eine neue Nachricht eingeht. Wenn eine neue Nachricht nicht vor Ablauf des Timeouts eingeht, wird eine Ausnahme ausgelöst.

Der timeout Parameter gibt nicht die Gesamtlaufzeit für diese Methode an. Stattdessen wird die Zeit angegeben, bis eine neue Nachricht in der Warteschlange eingetroffen ist. Jedes Mal, wenn eine neue Nachricht eingeht, überprüft diese Methode die Id neue Nachricht, um festzustellen, ob sie mit dem id Parameter übereinstimmt. Wenn dies nicht der Fall ist, beginnt diese Methode den Timeoutzeitraum, und wartet auf das Eintreffen einer anderen neuen Nachricht. Wenn also neue Nachrichten innerhalb des Timeoutzeitraums weiterhin eingehen, ist es möglich, dass diese Methode unbegrenzt weiter ausgeführt wird, entweder bis der Timeoutzeitraum abläuft, ohne dass neue Nachrichten eingehen, oder bis eine Nachricht eingeht, deren Id Übereinstimmung mit dem id Parameter übereinstimmt.

Geben Sie Automatic für den transactionType Parameter an, wenn bereits ein externer Transaktionskontext mit dem Thread verknüpft 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 aus einer Transaktionswarteschlange außerhalb eines Transaktionskontexts empfangen möchten.

Die Id Eigenschaft einer Nachricht ist für das Message Queuing-Unternehmen eindeutig, sodass es höchstens eine Nachricht in der Warteschlange gibt, die dem angegebenen id Parameter entspricht. Wenn sich die Nachricht mit dem angegebenen Bezeichner in einer anderen Warteschlange als der nachricht befindet, die dieser MessageQueue Instanz zugeordnet ist, wird die Nachricht nicht gefunden.

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

Wenn diese Methode aufgerufen wird, um eine Nachricht aus 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 zugesichert 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-, Bericht- oder anwendungsgenerierte Antwortnachricht abzurufen, die als Ergebnis einer an die Warteschlange gesendeten Nachricht erstellt 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. Es ist kein Transaktionskontext mit einer Nachricht verknüpft, die von einem Aufruf an PeekById(String)zurückgegeben wird. Da PeekById(String) keine Nachrichten in der Warteschlange entfernt werden, wäre kein Rollback erforderlich, wenn die Transaktion abgebrochen wurde.

In der folgenden Tabelle wird gezeigt, ob diese Methode in verschiedenen Arbeitsgruppenmodi verfügbar ist.

Arbeitsgruppenmodus Verfügbar
Lokaler Computer Ja
Name des lokalen Computers und des direkten Formats Ja
Remotecomputer No
Name des Remotecomputers und des direkten Formats Ja

Weitere Informationen

Gilt für: