MessageQueue.ReceiveById Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Reçoit le message qui correspond à l’identificateur donné, en le supprimant de la file d’attente.
Surcharges
| Nom | Description |
|---|---|
| ReceiveById(String) |
Reçoit le message qui correspond à l’identificateur donné d’une file d’attente non transactionnelle et déclenche immédiatement une exception si aucun message avec l’identificateur spécifié existe actuellement dans la file d’attente. |
| ReceiveById(String, MessageQueueTransaction) |
Reçoit le message qui correspond à l’identificateur donné (à partir d’une file d’attente transactionnelle) et déclenche immédiatement une exception si aucun message avec l’identificateur spécifié existe actuellement dans la file d’attente. |
| ReceiveById(String, MessageQueueTransactionType) |
Reçoit le message qui correspond à l’identificateur donné et déclenche immédiatement une exception si aucun message avec l’identificateur spécifié existe actuellement dans la file d’attente. |
| ReceiveById(String, TimeSpan) |
Reçoit le message qui correspond à l’identificateur donné (à partir d’une file d’attente non transactionnelle) et attend qu’un message avec l’identificateur spécifié soit disponible dans la file d’attente ou que le délai d’expiration expire. |
| ReceiveById(String, TimeSpan, MessageQueueTransaction) |
Reçoit le message qui correspond à l’identificateur donné (à partir d’une file d’attente transactionnelle) et attend qu’un message avec l’identificateur spécifié soit disponible dans la file d’attente, soit que le délai d’expiration expire. |
| ReceiveById(String, TimeSpan, MessageQueueTransactionType) |
Reçoit le message qui correspond à l’identificateur donné et attend qu’un message avec l’identificateur spécifié soit disponible dans la file d’attente, soit que le délai d’expiration expire. |
ReceiveById(String)
Reçoit le message qui correspond à l’identificateur donné d’une file d’attente non transactionnelle et déclenche immédiatement une exception si aucun message avec l’identificateur spécifié existe actuellement dans la file d’attente.
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
Retours
Dont Message la propriété correspond au id paramètre Id passé.
Exceptions
Le id paramètre est null.
Impossible de trouver le message avec le message spécifié id .
Une erreur s’est produite lors de l’accès à une méthode Message Queuing.
Exemples
L’exemple de code suivant illustre 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 est unique dans l’entreprise Message Queuing. Il y aura donc 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 dans la file d’attente et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un message de réponse généré par l’application, un rapport ou un accusé de réception 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 dans la file d’attente, de sorte que 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, MessageQueueTransaction)
Reçoit le message qui correspond à l’identificateur donné (à partir d’une file d’attente transactionnelle) et déclenche immédiatement une exception si aucun message avec l’identificateur spécifié existe actuellement dans la file d’attente.
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
- transaction
- MessageQueueTransaction
Objet MessageQueueTransaction.
Retours
Dont Message la propriété correspond au id paramètre Id passé.
Exceptions
Impossible de trouver le message avec le message spécifié id .
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 illustre 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 est unique dans l’entreprise Message Queuing. Il y aura donc 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 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 dans la file d’attente et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un message de réponse généré par l’application, un rapport ou un accusé de réception 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 dans la file d’attente, de sorte que 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 a été 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 donné et déclenche immédiatement une exception si aucun message avec l’identificateur spécifié existe actuellement dans la file d’attente.
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
- transactionType
- MessageQueueTransactionType
Une des MessageQueueTransactionType valeurs, décrivant le type de contexte de transaction à associer au message.
Retours
Dont Message la propriété correspond au id paramètre Id passé.
Exceptions
Le id paramètre est null.
Impossible de trouver le message avec le message spécifié id .
Le transactionType paramètre n’est pas l’un des MessageQueueTransactionType membres.
Une erreur s’est produite lors de l’accès à une méthode Message Queuing.
Exemples
L’exemple de code suivant illustre 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 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 si vous souhaitez Single 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 est unique dans l’entreprise Message Queuing. Il y aura donc 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 à cette 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 dans la file d’attente et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un message de réponse généré par l’application, un rapport ou un accusé de réception 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 dans la file d’attente, de sorte que 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 a été 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) et attend qu’un message avec l’identificateur spécifié soit disponible dans la file d’attente ou que le délai d’expiration 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
- timeout
- TimeSpan
Indiquant TimeSpan le temps d’attente jusqu’à ce qu’un nouveau message soit disponible pour inspection.
Retours
Dont Message la propriété correspond au id paramètre Id passé.
Exceptions
Le id paramètre est null.
La valeur spécifiée pour le timeout paramètre n’est pas valide, peut-être timeout est inférieure Zero ou supérieure à InfiniteTimeout.
Un message avec le spécifié id n’est pas arrivé dans la file d’attente avant l’expiration du délai d’expiration.
- ou -
Une erreur s’est produite lors de l’accès à une méthode Message Queuing.
Exemples
L’exemple de code suivant illustre 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. Au lieu de cela, il spécifie le temps d’attendre qu’un nouveau message arrive dans la file d’attente. Chaque fois qu’un nouveau message arrive, cette méthode examine le Id 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’attente et attend l’arrivée d’un autre nouveau message. Par conséquent, si de nouveaux messages continuent d’arriver dans le délai d’attente, il est possible que cette méthode continue à s’exécuter indéfiniment, soit jusqu’à ce que la période d’expiration expire sans aucun nouveau message arrivant, ou jusqu’à ce qu’un message arrive dont Id le id paramètre correspond.
La Id propriété d’un message est unique dans l’entreprise Message Queuing. Il y aura donc au maximum un message dans la file d’attente qui correspond au paramètre donné id .
Utilisez cette surcharge du ReceiveById(String) moment où il est acceptable que le thread actuel soit bloqué tant que les nouveaux messages continuent d’arriver dans la file d’attente pendant la période d’attente spécifiée par le timeout paramètre. Le thread est 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 la période d’attente spécifiée 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 dans la file d’attente et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un message de réponse généré par l’application, un rapport ou un accusé de réception 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 dans la file d’attente, de sorte que 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) et attend qu’un message avec l’identificateur spécifié soit disponible dans la file d’attente, soit que le délai d’expiration 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
- timeout
- TimeSpan
Indiquant TimeSpan le temps d’attente jusqu’à ce qu’un nouveau message soit disponible pour inspection.
- transaction
- MessageQueueTransaction
Objet MessageQueueTransaction.
Retours
Dont Message la propriété correspond au id paramètre Id passé.
Exceptions
La valeur spécifiée pour le timeout paramètre n’est pas valide, peut-être timeout est inférieure Zero ou supérieure à InfiniteTimeout.
Un message avec le spécifié id n’est pas arrivé dans la file d’attente avant l’expiration du délai d’expiration.
- 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 illustre 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. Au lieu de cela, il spécifie le temps d’attendre qu’un nouveau message arrive dans la file d’attente. Chaque fois qu’un nouveau message arrive, cette méthode examine le Id 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’attente et attend l’arrivée d’un autre nouveau message. Par conséquent, si de nouveaux messages continuent d’arriver dans le délai d’attente, il est possible que cette méthode continue à s’exécuter indéfiniment, soit jusqu’à ce que la période d’expiration expire sans aucun nouveau message arrivant, ou jusqu’à ce qu’un message arrive dont Id le id paramètre correspond.
La Id propriété d’un message est unique dans l’entreprise Message Queuing. Il y aura donc au maximum un message dans la file d’attente qui correspond au paramètre donné id .
Utilisez cette surcharge du ReceiveById(String) moment où il est acceptable que le thread actuel soit bloqué tant que les nouveaux messages continuent d’arriver dans la file d’attente pendant la période d’attente spécifiée par le timeout paramètre. Le thread est 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 au cours de la période d’expiration spécifiée 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 dans la file d’attente et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un message de réponse généré par l’application, un rapport ou un accusé de réception 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 dans la file d’attente, de sorte que 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 a été 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é et attend qu’un message avec l’identificateur spécifié soit disponible dans la file d’attente, soit que le délai d’expiration 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
- timeout
- TimeSpan
Indiquant TimeSpan le temps d’attente jusqu’à ce qu’un nouveau message soit disponible pour inspection.
- transactionType
- MessageQueueTransactionType
Une des MessageQueueTransactionType valeurs, décrivant le type de contexte de transaction à associer au message.
Retours
Dont Message la propriété correspond au id paramètre Id passé.
Exceptions
Le id paramètre est null.
La valeur spécifiée pour le timeout paramètre n’est pas valide, peut-être timeout est inférieure Zero ou supérieure à InfiniteTimeout.
Un message avec le spécifié id n’est pas arrivé dans la file d’attente avant l’expiration du délai d’expiration.
- ou -
Une erreur s’est produite lors de l’accès à une méthode Message Queuing.
Le transactionType paramètre n’est pas l’un des MessageQueueTransactionType membres.
Exemples
L’exemple de code suivant illustre 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 id paramètre se trouve dans la 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. Au lieu de cela, il spécifie le temps d’attendre qu’un nouveau message arrive dans la file d’attente. Chaque fois qu’un nouveau message arrive, cette méthode examine le Id 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’attente et attend l’arrivée d’un autre nouveau message. Par conséquent, si de nouveaux messages continuent d’arriver dans le délai d’attente, il est possible que cette méthode continue à s’exécuter indéfiniment, soit jusqu’à ce que la période d’expiration expire sans aucun nouveau message arrivant, ou jusqu’à ce qu’un message arrive dont Id le id paramètre correspond.
Spécifiez Automatic 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 si vous souhaitez Single 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 est unique dans l’entreprise Message Queuing. Il y aura donc 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 à cette MessageQueue instance, le message est introuvable.
Utilisez cette surcharge du ReceiveById(String) moment où il est acceptable que le thread actuel soit bloqué tant que les nouveaux messages continuent d’arriver dans la file d’attente pendant la période d’attente spécifiée par le timeout paramètre. Le thread est 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 la période d’attente spécifiée 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 dans la file d’attente et la ReceiveByCorrelationId(String) méthode est utilisée pour récupérer un message de réponse généré par l’application, un rapport ou un accusé de réception 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 dans la file d’attente, de sorte que 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 a été 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 |