Partager via


MessageQueue.ReceiveById Méthode

Définition

Reçoit le message qui correspond à l'identificateur donné et le supprime de la file d'attente.

Surcharges

ReceiveById(String)

Reçoit le message qui correspond à l'identificateur spécifié à partir d'une file d'attente non transactionnelle, et lève immédiatement une exception si la file ne contient aucun message correspondant à cet identificateur.

ReceiveById(String, MessageQueueTransaction)

Reçoit le message qui correspond à l'identificateur spécifié (à partir d'une file d'attente transactionnelle), et lève immédiatement une exception si la file ne contient aucun message correspondant à cet identificateur.

ReceiveById(String, MessageQueueTransactionType)

Reçoit le message qui correspond à l'identificateur spécifié et lève immédiatement une exception si la file d'attente ne contient aucun message correspondant à cet identificateur.

ReceiveById(String, TimeSpan)

Reçoit le message qui correspond à l'identificateur donné (à partir d'une file d'attente non transactionnelle), puis attend qu'un message ayant cet identificateur soit disponible dans la file d'attente, ou que le délai d'attente expire.

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Reçoit le message qui correspond à l'identificateur donné (à partir d'une file d'attente transactionnelle), puis attend qu'un message ayant cet identificateur soit disponible dans la file d'attente, ou que le délai d'attente expire.

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Reçoit le message qui correspond à l'identificateur donné, puis attend qu'un message ayant l'identificateur spécifié soit disponible dans la file d'attente, ou que le délai d'attente expire.

ReceiveById(String)

Reçoit le message qui correspond à l'identificateur spécifié à partir d'une file d'attente non transactionnelle, et lève immédiatement une exception si la file ne contient aucun message correspondant à cet identificateur.

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

Paramètres

id
String

Propriété Id du message à recevoir.

Retours

Message dont la propriété Id correspond au paramètre id passé.

Exceptions

Le paramètre id a la valeur null.

Impossible de trouver le message avec le paramètre id spécifié.

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

L'exemple de code suivant montre l'utilisation de 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);

Remarques

Utilisez cette méthode pour lire un message avec un identificateur connu et le supprimer de la file d’attente. Cette méthode lève immédiatement une exception si le message n’est pas dans la file d’attente.

La Id propriété d’un message étant unique dans l’entreprise Message Queuing, il y aura au maximum un message dans la file d’attente qui correspond au paramètre donné id .

Deux autres méthodes vous permettent de recevoir des messages d’une file d’attente. La Receive méthode retourne le premier message de la file d’attente, et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un accusé de réception, un rapport ou un message de réponse généré par l’application qui a été créé à la suite d’un message envoyé à la file d’attente.

Pour lire un message avec un identificateur spécifié sans le supprimer de la file d’attente, utilisez la PeekById(String) méthode . La PeekById(String) méthode retourne toujours le premier message de la file d’attente, de sorte que les appels suivants à la méthode retournent le même message, sauf si un message de priorité plus élevée arrive dans la file d’attente.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

ReceiveById(String, MessageQueueTransaction)

Reçoit le message qui correspond à l'identificateur spécifié (à partir d'une file d'attente transactionnelle), et lève immédiatement une exception si la file ne contient aucun message correspondant à cet identificateur.

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

Paramètres

id
String

Propriété Id du message à recevoir.

Retours

Message dont la propriété Id correspond au paramètre id passé.

Exceptions

Le paramètre id a la valeur null.

- ou -

Le paramètre transaction a la valeur null.

Impossible de trouver le message avec le paramètre id spécifié.

La file d'attente n'est pas transactionnelle.

- ou -

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

L'exemple de code suivant montre l'utilisation de 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();
}

Remarques

Utilisez cette méthode pour lire un message avec un identificateur connu et le supprimer de la file d’attente, à l’aide du contexte de transaction interne défini par le transaction paramètre . Cette méthode lève immédiatement une exception si le message n’est pas dans la file d’attente

La Id propriété d’un message étant unique dans l’entreprise Message Queuing, il y aura au maximum un message dans la file d’attente qui correspond au paramètre donné id .

Étant donné que cette méthode est appelée dans une file d’attente transactionnelle, le message reçu est retourné à la file d’attente si la transaction est abandonnée. Le message n’est pas supprimé définitivement de la file d’attente tant que la transaction n’est pas validée.

Deux autres méthodes vous permettent de recevoir des messages d’une file d’attente. La Receive méthode retourne le premier message de la file d’attente, et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un accusé de réception, un rapport ou un message de réponse généré par l’application qui a été créé à la suite d’un message envoyé à la file d’attente.

Pour lire un message avec un identificateur spécifié sans le supprimer de la file d’attente, utilisez la PeekById(String) méthode . La PeekById(String) méthode retourne toujours le premier message de la file d’attente, de sorte que les appels suivants à la méthode retournent le même message, sauf si un message de priorité plus élevée arrive dans la file d’attente. Aucun contexte de transaction n’est associé à un message retourné par un appel à PeekById(String). Étant donné que PeekById(String) ne supprime aucun message dans la file d’attente, il n’y aurait rien à restaurer si la transaction était abandonnée.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

ReceiveById(String, MessageQueueTransactionType)

Reçoit le message qui correspond à l'identificateur spécifié et lève immédiatement une exception si la file d'attente ne contient aucun message correspondant à cet identificateur.

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

Paramètres

id
String

Propriété Id du message à recevoir.

transactionType
MessageQueueTransactionType

Une des valeurs de MessageQueueTransactionType décrivant le type de contexte de transaction à associer au message.

Retours

Message dont la propriété Id correspond au paramètre id passé.

Exceptions

Le paramètre id a la valeur null.

Impossible de trouver le message avec le paramètre id spécifié.

Le paramètre transactionType ne fait pas partie des membres MessageQueueTransactionType.

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

L'exemple de code suivant montre l'utilisation de 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);

Remarques

Utilisez cette méthode pour lire un message avec un identificateur connu et le supprimer de la file d’attente. Cette méthode lève immédiatement une exception si le message n’est pas dans la file d’attente. Sinon, le message est supprimé de la file d’attente et retourné à l’application à l’aide d’un contexte de transaction défini par le transactionType paramètre .

Spécifiez Automatic pour le transactionType paramètre s’il existe déjà un contexte de transaction externe attaché au thread que vous souhaitez utiliser pour recevoir le message. Spécifiez Single si vous souhaitez recevoir le message en tant que transaction interne unique. Vous pouvez spécifier None si vous souhaitez recevoir un message d’une file d’attente transactionnelle en dehors d’un contexte de transaction.

La Id propriété d’un message étant unique dans l’entreprise Message Queuing, il y aura au maximum un message dans la file d’attente qui correspond au paramètre donné id . Si le message avec l’identificateur spécifié se trouve dans une file d’attente autre que celle associée à ce MessageQueue instance, le message est introuvable.

Si cette méthode est appelée pour recevoir un message d’une file d’attente transactionnelle, le message reçu est retourné à la file d’attente si la transaction est abandonnée. Le message n’est pas supprimé définitivement de la file d’attente tant que la transaction n’est pas validée.

Deux autres méthodes vous permettent de recevoir des messages d’une file d’attente. La Receive méthode retourne le premier message de la file d’attente, et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un accusé de réception, un rapport ou un message de réponse généré par l’application qui a été créé à la suite d’un message envoyé à la file d’attente.

Pour lire un message avec un identificateur spécifié sans le supprimer de la file d’attente, utilisez la PeekById(String) méthode . La PeekById(String) méthode retourne toujours le premier message de la file d’attente, de sorte que les appels suivants à la méthode retournent le même message, sauf si un message de priorité plus élevée arrive dans la file d’attente. Aucun contexte de transaction n’est associé à un message retourné par un appel à PeekById(String). Étant donné que PeekById(String) ne supprime aucun message dans la file d’attente, il n’y aurait rien à restaurer si la transaction était abandonnée.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

ReceiveById(String, TimeSpan)

Reçoit le message qui correspond à l'identificateur donné (à partir d'une file d'attente non transactionnelle), puis attend qu'un message ayant cet identificateur soit disponible dans la file d'attente, ou que le délai d'attente expire.

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

Paramètres

id
String

Propriété Id du message à recevoir.

timeout
TimeSpan

TimeSpan qui indique la durée d'attente avant qu'un nouveau message ne soit accessible pour consultation.

Retours

Message dont la propriété Id correspond au paramètre id passé.

Exceptions

Le paramètre id a la valeur null.

La valeur spécifiée pour le paramètre timeout n'est pas valide. Il se peut que timeout soit inférieur à Zero ou supérieur à InfiniteTimeout.

Aucun message possédant le paramètre id spécifié n'est arrivé dans la file d'attente avant l'expiration du délai d'attente.

- ou -

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

L'exemple de code suivant montre l'utilisation de 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));

Remarques

Utilisez cette méthode pour lire un message avec un identificateur connu et le supprimer de la file d’attente. Cette méthode retourne immédiatement si le message avec l’identificateur spécifié par le id paramètre se trouve dans la file d’attente. Sinon, la méthode attend la période donnée pour qu’un nouveau message arrive. Si un nouveau message n’arrive pas avant l’expiration du délai d’expiration, une exception est levée.

Le timeout paramètre ne spécifie pas le temps d’exécution total de cette méthode. Il spécifie plutôt le délai d’attente pour qu’un nouveau message arrive dans la file d’attente. Chaque fois qu’un nouveau message arrive, cette méthode examine le Id du nouveau message pour voir s’il correspond au id paramètre. Si ce n’est pas le cas, cette méthode démarre le délai d’expiration et attend qu’un autre nouveau message arrive. Par conséquent, si de nouveaux messages continuent d’arriver dans le délai d’expiration, cette méthode peut continuer à s’exécuter indéfiniment, soit jusqu’à ce que le délai d’expiration expire sans qu’aucun nouveau message n’arrive, soit jusqu’à l’arrivée d’un message dont Id le paramètre correspond au id paramètre.

La Id propriété d’un message étant unique dans l’entreprise Message Queuing, il y aura tout au plus un message dans la file d’attente qui correspond au paramètre donné id .

Utilisez cette surcharge de ReceiveById(String) lorsqu’il est acceptable que le thread actuel soit bloqué tant que les nouveaux messages continuent d’arriver dans la file d’attente dans le délai d’attente spécifié par le timeout paramètre. Le thread sera bloqué pendant au moins la période donnée, ou indéfiniment si vous avez spécifié la valeur InfiniteTimeout du timeout paramètre, ou si de nouveaux messages continuent d’arriver dans la file d’attente dans le délai d’attente spécifié par le timeout paramètre.

Deux autres méthodes vous permettent de recevoir des messages d’une file d’attente. La Receive méthode retourne le premier message de la file d’attente, et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un accusé de réception, un rapport ou un message de réponse généré par l’application qui a été créé à la suite d’un message envoyé à la file d’attente.

Pour lire un message avec un identificateur spécifié sans le supprimer de la file d’attente, utilisez la PeekById(String) méthode . Comme PeekById(String) la méthode retourne toujours le premier message de la file d’attente, les appels suivants à la méthode retournent le même message, sauf si un message de priorité supérieure arrive dans la file d’attente.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

ReceiveById(String, TimeSpan, MessageQueueTransaction)

Reçoit le message qui correspond à l'identificateur donné (à partir d'une file d'attente transactionnelle), puis attend qu'un message ayant cet identificateur soit disponible dans la file d'attente, ou que le délai d'attente expire.

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

Paramètres

id
String

Propriété Id du message à recevoir.

timeout
TimeSpan

TimeSpan qui indique la durée d'attente avant qu'un nouveau message ne soit accessible pour consultation.

Retours

Message dont la propriété Id correspond au paramètre id passé.

Exceptions

Le paramètre id a la valeur null.

- ou -

Le paramètre transaction a la valeur null.

La valeur spécifiée pour le paramètre timeout n'est pas valide. Il se peut que timeout soit inférieur à Zero ou supérieur à InfiniteTimeout.

Aucun message possédant le paramètre id spécifié n'est arrivé dans la file d'attente avant l'expiration du délai d'attente.

- ou -

La file d'attente n'est pas transactionnelle.

- ou -

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Exemples

L'exemple de code suivant montre l'utilisation de 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();
}

Remarques

Utilisez cette méthode pour lire un message avec un identificateur connu et le supprimer de la file d’attente, à l’aide du contexte de transaction interne défini par le transaction paramètre. Cette méthode retourne immédiatement si le message avec l’identificateur spécifié par le id paramètre se trouve dans la file d’attente. Sinon, la méthode attend la période donnée pour qu’un nouveau message arrive. Si un nouveau message n’arrive pas avant l’expiration du délai d’expiration, une exception est levée.

Le timeout paramètre ne spécifie pas le temps d’exécution total de cette méthode. Il spécifie plutôt le délai d’attente pour qu’un nouveau message arrive dans la file d’attente. Chaque fois qu’un nouveau message arrive, cette méthode examine le Id du nouveau message pour voir s’il correspond au id paramètre. Si ce n’est pas le cas, cette méthode démarre le délai d’expiration et attend qu’un autre nouveau message arrive. Par conséquent, si de nouveaux messages continuent d’arriver dans le délai d’expiration, cette méthode peut continuer à s’exécuter indéfiniment, soit jusqu’à ce que le délai d’expiration expire sans qu’aucun nouveau message n’arrive, soit jusqu’à l’arrivée d’un message dont Id le paramètre correspond au id paramètre.

La Id propriété d’un message étant unique dans l’entreprise Message Queuing, il y aura tout au plus un message dans la file d’attente qui correspond au paramètre donné id .

Utilisez cette surcharge de ReceiveById(String) lorsqu’il est acceptable que le thread actuel soit bloqué tant que les nouveaux messages continuent d’arriver dans la file d’attente dans le délai d’attente spécifié par le timeout paramètre. Le thread sera bloqué pendant au moins la période donnée, ou indéfiniment si vous avez spécifié la valeur InfiniteTimeout pour le timeout paramètre, ou si de nouveaux messages continuent d’arriver dans la file d’attente dans le délai d’expiration spécifié par le timeout paramètre.

Étant donné que cette méthode est appelée sur une file d’attente transactionnelle, le message reçu est retourné à la file d’attente si la transaction est abandonnée. Le message n’est pas supprimé définitivement de la file d’attente tant que la transaction n’est pas validée.

Deux autres méthodes vous permettent de recevoir des messages d’une file d’attente. La Receive méthode retourne le premier message de la file d’attente, et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un accusé de réception, un rapport ou un message de réponse généré par l’application qui a été créé à la suite d’un message envoyé à la file d’attente.

Pour lire un message avec un identificateur spécifié sans le supprimer de la file d’attente, utilisez la PeekById(String) méthode . La PeekById(String) méthode retourne toujours le premier message de la file d’attente, de sorte que les appels suivants à la méthode retournent le même message, sauf si un message de priorité plus élevée arrive dans la file d’attente. Aucun contexte de transaction n’est associé à un message retourné par un appel à PeekById(String). Étant donné que PeekById(String) ne supprime aucun message dans la file d’attente, il n’y aurait rien à restaurer si la transaction était abandonnée.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à

ReceiveById(String, TimeSpan, MessageQueueTransactionType)

Reçoit le message qui correspond à l'identificateur donné, puis attend qu'un message ayant l'identificateur spécifié soit disponible dans la file d'attente, ou que le délai d'attente expire.

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

Paramètres

id
String

Propriété Id du message à recevoir.

timeout
TimeSpan

TimeSpan qui indique la durée d'attente avant qu'un nouveau message ne soit accessible pour consultation.

transactionType
MessageQueueTransactionType

Une des valeurs de MessageQueueTransactionType décrivant le type de contexte de transaction à associer au message.

Retours

Message dont la propriété Id correspond au paramètre id passé.

Exceptions

Le paramètre id a la valeur null.

La valeur spécifiée pour le paramètre timeout n'est pas valide. Il se peut que timeout soit inférieur à Zero ou supérieur à InfiniteTimeout.

Aucun message possédant le paramètre id spécifié n'est arrivé dans la file d'attente avant l'expiration du délai d'attente.

- ou -

Une erreur s'est produite lors de l'accès à une méthode Message Queuing.

Le paramètre transactionType ne fait pas partie des membres MessageQueueTransactionType.

Exemples

L'exemple de code suivant montre l'utilisation de 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);

Remarques

Utilisez cette méthode pour lire un message avec un identificateur connu et le supprimer de la file d’attente. Cette méthode retourne immédiatement si le message avec l’identificateur spécifié par le paramètre se trouve dans la id file d’attente, à l’aide d’un contexte de transaction défini par le transactionType paramètre. Sinon, la méthode attend la période donnée pour qu’un nouveau message arrive. Si un nouveau message n’arrive pas avant l’expiration du délai d’expiration, une exception est levée.

Le timeout paramètre ne spécifie pas le temps d’exécution total de cette méthode. Il spécifie plutôt le délai d’attente pour qu’un nouveau message arrive dans la file d’attente. Chaque fois qu’un nouveau message arrive, cette méthode examine le Id du nouveau message pour voir s’il correspond au id paramètre. Si ce n’est pas le cas, cette méthode démarre le délai d’expiration et attend qu’un autre nouveau message arrive. Par conséquent, si de nouveaux messages continuent d’arriver dans le délai d’expiration, cette méthode peut continuer à s’exécuter indéfiniment, soit jusqu’à ce que le délai d’expiration expire sans qu’aucun nouveau message n’arrive, soit jusqu’à l’arrivée d’un message dont Id le paramètre correspond au id paramètre.

Spécifiez Automatic pour le transactionType paramètre s’il existe déjà un contexte de transaction externe attaché au thread que vous souhaitez utiliser pour recevoir le message. Spécifiez Single si vous souhaitez recevoir le message en tant que transaction interne unique. Vous pouvez spécifier None si vous souhaitez recevoir un message d’une file d’attente transactionnelle en dehors d’un contexte de transaction.

La Id propriété d’un message étant unique dans l’entreprise Message Queuing, il y aura tout au plus un message dans la file d’attente qui correspond au paramètre donné id . Si le message avec l’identificateur spécifié se trouve dans une file d’attente autre que celle associée à cette MessageQueue instance, le message est introuvable.

Utilisez cette surcharge de ReceiveById(String) lorsqu’il est acceptable que le thread actuel soit bloqué tant que les nouveaux messages continuent d’arriver dans la file d’attente dans le délai d’attente spécifié par le timeout paramètre. Le thread sera bloqué pendant au moins la période donnée, ou indéfiniment si vous avez spécifié la valeur InfiniteTimeout du timeout paramètre, ou si de nouveaux messages continuent d’arriver dans la file d’attente dans le délai d’attente spécifié par le timeout paramètre.

Si cette méthode est appelée pour recevoir un message d’une file d’attente transactionnelle, le message reçu est retourné à la file d’attente si la transaction est abandonnée. Le message n’est pas supprimé définitivement de la file d’attente tant que la transaction n’est pas validée.

Deux autres méthodes vous permettent de recevoir des messages d’une file d’attente. La Receive méthode retourne le premier message de la file d’attente, et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un accusé de réception, un rapport ou un message de réponse généré par l’application qui a été créé à la suite d’un message envoyé à la file d’attente.

Pour lire un message avec un identificateur spécifié sans le supprimer de la file d’attente, utilisez la PeekById(String) méthode . Comme PeekById(String) la méthode retourne toujours le premier message de la file d’attente, les appels suivants à la méthode retournent le même message, sauf si un message de priorité supérieure arrive dans la file d’attente. Aucun contexte de transaction n’est associé à un message retourné par un appel à PeekById(String). Étant donné que PeekById(String) ne supprime aucun message dans la file d’attente, il n’y aurait rien à restaurer si la transaction était abandonnée.

Le tableau suivant indique si cette méthode est disponible dans différents modes de groupe de travail.

Mode groupe de travail Disponible
Ordinateur local Oui
Ordinateur local et nom de format direct Oui
Ordinateur distant Non
Ordinateur distant et nom de format direct Oui

Voir aussi

S’applique à