Comment : lire des messages
Mise à jour : novembre 2007
Vous pouvez utiliser la méthode Peek pour lire le premier message d'une file d'attente sans retirer ce message de la file d'attente. Cela permet à votre composant d'obtenir des informations de la file d'attente sans empêcher d'autres applications ou composants de récupérer des messages qu'ils ont l'intention de traiter.
Remarque : |
---|
Peek vous permet de voir uniquement le premier message de la file d'attente. Dans la mesure où ce message n'est pas retiré de la file d'attente lorsque vous le lisez, vous ne pouvez plus ensuite lire les messages suivants. Si vous souhaitez voir tous les messages d'une file d'attente sans les retirer, vous pouvez utiliser les méthodes GetAllMessages ou GetMessageEnumerator. Pour plus d'informations, consultez Collections de messages et de files d'attente. |
S'il n'y a pas de messages dans la file d'attente lorsque vous appelez la méthode Peek, celle-ci attend jusqu'à ce qu'un message arrive. Vous pouvez spécifier un délai d'attente si vous souhaitez que la méthode attende uniquement pendant une durée spécifiée. Le délai d'attente est spécifié en tant qu'objet TimeSpan. Dans la plupart des cas, la valeur du délai d'attente est soit zéro, auquel cas la méthode vérifie la présence d'un message et n'attend pas du tout, soit le paramètre infini par défaut et, dans ce cas, elle attend indéfiniment. Pour définir le paramètre infini dans le code, utilisez la syntaxe suivante :
msg.TimeToBeReceived = System.Messaging.Message.InfiniteTimeout
msg.TimeToBeReceived = System.Messaging.Message.InfiniteTimeout;
msg.set_TimeToBeReceived(System.Messaging.Message.InfiniteTimeout);
Vous pouvez également le définir dans la fenêtre Propriétés en définissant la propriété TimeToBeReceived.
Conseil : |
---|
Lorsque vous utilisez des clients dépendants, veillez à ce que l'horloge de l'ordinateur client soit synchronisée avec celle du serveur Message Queuing. Sinon, vous pouvez être confronté à un comportement imprévisible lors de l'envoi d'un message dont la propriété TimeToBeReceived n'a pas la valeur InfiniteTimeout. |
La lecture peut être synchrone ou asynchrone. Pour plus d'informations, consultez Comment : recevoir des messages de manière asynchrone.
Pour lire des messages en mode synchrone
Créez une instance du composant MessageQueue et affectez à sa propriété Path la file d'attente à laquelle vous voulez faire référence. Pour plus d'informations, consultez Comment : créer des instances du composant MessageQueue.
Créez une instance de l'objet Message pour rendre persistantes les données que la méthode Peek copie à partir de la file d'attente.
Appelez la méthode Peek pour obtenir les données relatives au premier message de la file d'attente. Éventuellement, pour spécifier un délai d'attente pour la méthode Peek, entrez le délai d'attente (en tant qu'objet TimeSpan) que doit respecter la méthode en tant qu'argument de celle-ci.
Dans l'exemple suivant, le code montre comment utiliser la méthode Peek pour retourner et afficher des informations sur le premier message d'une file d'attente.
Public Sub LookFirstMessage() Dim NewQueue As New System.Messaging.MessageQueue(".\MyQueue") Dim FirstMessage As System.Messaging.Message FirstMessage = NewQueue.Peek Dim targetNames() As String = {"System.String,mscorlib"} FirstMessage.Formatter = _ New System.Messaging.XmlMessageFormatter(targetNames) Dim label As String = CStr(FirstMessage.Label) End Sub
public void LookFirstMessage() { System.Messaging.MessageQueue newQueue = new System.Messaging.MessageQueue(".\\MyQueue"); System.Messaging.Message firstMessage; string[] types = { "System.String,mscorlib" }; firstMessage = newQueue.Peek(); firstMessage.Formatter = new System.Messaging.XmlMessageFormatter(types); string label = firstMessage.Label.ToString(); }
Voir aussi
Tâches
Comment : recevoir des messages par programme
Comment : créer des instances du composant MessageQueue