P. 1
Le MSMQ

Le MSMQ

|Views: 167|Likes:
Publié parhmidouchch

More info:

Published by: hmidouchch on Jan 10, 2011
Droits d'auteur :Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

03/29/2013

pdf

text

original

Le MSMQ

Version 1.0
Z

Pierre-Franck Chauvet

2

[Le MSMQ]

[Date : 10/10/09]

Sommaire

1 2

Introduction ..................................................................................................................................... 3 Le Concept ....................................................................................................................................... 5 2.1 2.2 2.3 2.4 Les messages ........................................................................................................................... 5 Les files d’attentes ................................................................................................................... 5 WorkGroup .............................................................................................................................. 7 Active Directory ....................................................................................................................... 7

3

Utilisation ........................................................................................................................................ 9 3.1 3.2 Activer le service ..................................................................................................................... 9 Dans le code .......................................................................................................................... 12 Création d’une file d’attente privée .............................................................................. 13 Déclaration de la file d’attente ...................................................................................... 13 Création de message ..................................................................................................... 13 Envoi d’un message ....................................................................................................... 14 Réception d’un message ............................................................................................... 15 Répondre à un message ................................................................................................ 16

3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.3 4

Exemple ................................................................................................................................. 16

Conclusion ..................................................................................................................................... 24

Dotnet France Association

l’utilisateur choisi ce qu’il fait de ses mails (archivage. et les utilisateurs aux applications. De même.0 sur Windows 2000. le Message Queuing peut s’exécuter dans un environnement déconnecté.0 pour Windows Vista. il sera toujours possible de récupérer les résultats lors de la prochaine connexion.0 sur Windows X et Serveur 2003. En effet.3 [Le MSMQ] [Date : 10/10/09] 1 Introduction Le MSMQ (MicroSoft Message Queuing) est la technologie proposée par Microsoft pour gérer les files d’attente en programmation interprocessus. v3. MSMQ va plus loin car il permet en plus de garder les messages sur le Système d’exploitation même si le programme n’est pas lancé. actuellement la v4. de plus l’un des principes de MSMQ est d’enlever les messages reçus de la file d’attente (notion qui peut être modifiée). dans les messageries e-mail. L’utilisation du message queuing est asynchrone : en effet le client n’attend pas la réponse au message pour continuer sur la suite du programme.0. Ici. Cette technologie est implantée depuis Windows 95 avec MSMQ v1. Les files d’attente de messages sont des liaisons asynchrones entre plusieurs processus. les boîtes e-mail aux files d’attente MSMQ. si les calculs serveur prennent du temps et que le client se déconnecte. L’exemple le plus simple est de le comparer à un système de messagerie électronique (e-mail). on peut assimiler les messages e-mail aux messages MSMQ.NET Remoting One-Way et Asynchrone). Dotnet France Association . ce qui apporte tous les avantages exposés dans le cours précédant (voir le chapitre sur Le . Ainsi un programme qui n’aura pas besoin d’une connexion continue au serveur pourra créer des messages à chaque demande auprès du serveur. nous allons étudier les files d’attente MSMQ Microsoft et comment interagir avec dans nos programme . suppression). en effet les services de messagerie électronique sont centralisés et n’utilisent pas plusieurs chemins d’accès tels que MSMQ. et les envoyer une fois le serveur connecté. ceci est un exemple général. v2. Mais le Remoting asynchrone impliquait le fait que le client et le serveur s’exécutent en même temps.NET. 7 et Server2008. c’est l’infrastructure qui permet un couplage d’application grâce à des files d’attente et des messages. Attention. Dans ce chapitre. Cette technologie est le MOM (Message Oriented Middleware) par Microsoft . Du coup.

4 [Le MSMQ] [Date : 10/10/09] Dotnet France Association .

On retrouve ces files d’attente dans le répertoire « C:\Windows\System32\msmq\storage ». Type de file d’attente Publique Privée Journal Description Est publiée dans active directory. Dotnet France Association . Il existe plusieurs types de messages ainsi que différentes files d’attentes pour gérer toutes les possibilités. Message de rapport.5 [Le MSMQ] [Date : 10/10/09] 2 Le Concept Le concept du MSMQ est l’échange de messages entre plusieurs parties (processus). Formater Obtient ou définit le formateur utilisé pour sérialiser et désérialiser l’objet. Ces files d’attente peuvent être consultées avec le chemin d’accès complet Est utilisée pour conserver des copies des messages après envoi ou réception. 2.1 Les messages La bonne compréhension des messages ett essentielle. 2. Message d’accusé de réception. envoyé par l’application à une file d’attente. Ils sont donc envoyés aux files d’attente et comportent plusieurs paramètres tels que : Description Corps du message comprenant les données. Priority Obtient ou définit la priorité du message. Avec des files publiques il n’y a pas obligation de créer N’est pas publiée dans Active Directory. ID Permet d’identifier le message. il en existe différents types :     Message dit normal. tout message reçu ou stocké sera obligatoirement compris dans une file d’attente. C’est un message test. Il existe différents types de files d’attente disponibles avec MSMQ. UseJournal Obtient ou définit si on utilise une file d’attente journal avec copie des messages. qui est généré en interne par Message Queuing. ReponseQueue Obtient ou définit la file d’attente de réponse du message. ils sont envoyés à la file d’attente d’administration. Body Label Paramètre De plus. Message de réponse. TimeToReachQueue Obtient ou définit le délai accordé à un message pour atteindre la file d’attente. AdministrationQueue Obtient ou définit la file d’attente d’administration.2 Les files d’attentes Une file d’attente est un réservoir à messages . TimeToBeReceived Obtient ou définit le délai d’attente pour la réception du message à partir de la file d’attente de destination. Ou étiquette du message qui peut correspondre à l’objet sur un mail. est envoyé lorsque l’expéditeur attend une certaine réponse. qui indique l’état d’un message dit normal. Pour cela on rajoute une application tiers (où on l’intègre au client/serveur) qui gérera la communication entre le client et le serveur. DestinationQueue Obtient la file d’attente de destination.

6 [Le MSMQ] Dead-letter [Date : 10/10/09] Est la file d’attente où finissent les messages erronés. « DIRECT=http://AdresseURL/msmq/NomDeLaQueuePublique » « DIRECT=http://AdresseURL\msmq\NomDeLaQueuePublique » Il existe aussi le format public qui permet de référencer une file d’attente publique en utilisant le routage interne à MSMQ : « PUBLIC= GUIDDeLaQueuePublique » Le format privé dont le fonctionnement est assez similaire sauf qu’ici il faut spécifier le GUID de la machine et non de la queue (les queues privée n’utilisant pas l’Active Directory) « PRIVATE=GUIDDeLaMachine\NomDeLaQueue » Enfin il est possible d’utiliser plusieurs files d’attente à l’aide d’une virgule « DIRECT=OS :PFCH5Laptop\NomDeLaQueuePublique. En effet message queuing dispose d’une gestion des erreurs Peut être paramétrée pour recevoir les accusés de réception et gérer ainsi les différents échanges. Files qui peut être créée en changeant le type d’une file d’attente privée ou publique Files d’attente privées. Le plus courant est celui direct qui permet d’accéder à des files d’attentes aussi bien publiques que privées sans passer par le service Active directory.5\Private$\ NomDeLaQueue Privée »  Dotnet France Association .0. Reçoit les messages de type « Acknowledgement » Peut être paramétrée pour recevoir les réponses de certains messages.0. le nom de format existe sous plusieurs formes.DIRECT =TCP :192.\Private$\NomDeLaQueuePrivée » Le nom de format : à privilégier pour de la programmation.5\$Private\NomDeLaQueuePrivée »  http : permet de spécifier l’adresse URL. elles sont utilisées pour des messages d’administration.168.168. Remarque : pour le protocole http (et seulement ce protocole) il est possible d’utiliser des slashes ou des antislashes. Administration Réponse Rapport Système La dénomination des files d’attente peut s’effectuer de deux façons différentes:  Le nom de chemin : assez similaire à une adresse de répertoire partagée. d’archivage de notification ou pour garantir l’ordre correct des messages transactionnels. « DIRECT=AdresseDeLaMachine\NomDeLaQueuePublique » Pour spécifier l’adresse de la machine on peut utiliser les techniques suivantes :  OS : Il permet de spécifier le nom de la machine directement « DIRECT=OS :PFCH5-Laptop\$Private\NomDeLaQueuePrivée »  TCP : Il permet de spécifier l’IP de la machine « DIRECT=TCP :192. il peut être utilisé le plus souvent pour des files d’attente local (le nom de la machine est donc remplacé par un simple point) « NomDeLaMachine\NomDeLaQueuePublique » Exemple d’une file d’attente privée local « .

obligation d’utiliser des certificats externes pour l’envoi de message avec authentification l’encryption des messages est impossible ainsi que l’envoi des messages vers une file d’attente étrangère (n’utilisant pas le MSMQ) ou vers des connecteurs.4 Active Directory Active Directory est la mise en en œuvre des services d’annuaires dans un environnement Windows. les files d’attente privées ne sont créées et gérées qu’en local et les files d’attente publique sont impossibles d’accès (il est néanmoins possible d’accéder à une file d’attente privée avec une liaison directe : voir première contrainte). et dossier partagés. Il comprend les domaines classés selon une arborescence :    La Forêt représente l’ensemble de tous les sous domaines Active Directory (et regroupe les Arbres). Domaine représente un conteneur ou une feuille. Chacun de ces modes présente des particularités et restrictions propres. Dotnet France Association . De plus. il équipe depuis Windows 2003 et 2008. L’Arbre représente l’ensemble des conteneurs et feuilles de l’Active Directory. Il permet des services de centralisation et d’authentification sur un réseau utilisant Windows.    2. Imprimantes ou autres machines réseau sont répertoriées. Mis en place avec Windows Server 2000. WorkGroup : utilisé dans les domaines n’utilisant pas l’active directory Offline : utilisé pour des machines en mode domaine d’application mais n’étant pas connectées. Ainsi les différents postes Windows. Active Directory prend aussi en compte les Comptes utilisateurs.3 WorkGroup L’utilisation de MSMQ peut se faire selon 3 modes distincts :    Domaines d’application (Windows Serveur) : utilise l’active directory.7 [Le MSMQ] [Date : 10/10/09] Syntaxe NomDelaMachine\NomDeLaQueuePublique NomDelaMachine\Private$\NomDeLaQueuePrivée NomDelaMachine\NomDelaQueue\Journal$ NomDeLaMAchine\Deadletter$ Type de file d’attente Publique Privée Journal Dead-letter 2. Nos ordinateurs utiliseront la plupart du temps le mode WorkGroup ce qui implique donc les contraintes suivantes :   Une liaison directe entre l’expéditeur et le destinataire (due à une impossibilité d’utiliser les serveurs de routage).

pour tous types d’ordinateurs utilisant Message Queuing (sauf un client dépendant). Ces objets contiennent des informations Message Queuing. Dotnet France Association . des objets Message Queuing sont créés dans l’Active Directory.8 [Le MSMQ] [Date : 10/10/09] Dans un environnement de domaine.

il est impératif. En effet.9 [Le MSMQ] [Date : 10/10/09] 3 Utilisation 3. d’activer le service dans votre Windows. puis dans la Catégorie « Programmes ». Dotnet France Association . Ici vous pourrez trouver une case « Serveur de mise en file d’attente Microsoft (MSMQ) » qu’il suffira de cocher. il vous sera possible d’utiliser toutes les possibilités MSMQ citées avant. Pour cela. « Programmes et fonctionnalités ». « Activer ou désactiver des fonctionnalités Windows ». rendez vous dans le panneau de configuration de votre Windows (ici Windows 7). une fois le service mis en place.1 Activer le service Avant de commencer à examiner et programmer des applications MSMQ.

Dotnet France Association . ou en tapant « MMC » dans le champs de recherche. Une fois ce service coché.10 [Le MSMQ] [Date : 10/10/09] Remarque : il est possible de dérouler le menu est de trouver des fonctionnalités supplémentaires qui ne seront pas utilisées dans ce cours. puis fichier. on peut le retrouver dans le panneau « gestion de l’ordinateur » (accessible depuis le menu démarrer avec un clic droit sur « Ordinateur » puis « Gérer » .msc ». ouvrir « compmgmt.

les créer ou voir les contenus. il vous sera possible de gérer les file d’attentes à votre convenance. ainsi que de leur associer des triggers (déclencheurs). Dotnet France Association .11 [Le MSMQ] [Date : 10/10/09] D’ici.

2 Dans le code Il est possible d’utiliser le Message Queuing dans les programmes . Permet de supprimer une file d’attente.Messaging. Permet de supprimer tous les messages de la file d’attente Permet de recevoir le message correspondant à l’Id donné Permet de recevoir le message correspondant à l’Id sans le supprimer de la file d’attente Permet de lancer une opération de réception asynchrone d’un message de la file d’attente.12 [Le MSMQ] [Date : 10/10/09] 3.NET Imports System. Pour cela il est essentiel d’ajouter la référence « System. Permet de vérifier l’existence ou non d’une file d’attente avec le chemin spécifié. Permet l’envoi d’un objet dans une file d’attente. ‘VB.Messaging » qui donnera accès à tous les outils de gestion des messages. Permet la réception d’un message et donc la suppression de l’objet de la file d’attente Permet la réception d’un message de la file d’attente sans le supprimer de celle-ci. //C# using System. le supprime de celle ci et avertit le gestionnaire d’évènement une fois terminé (sans le supprimer pour BeginPeek) Dotnet France Association .Messaging On trouve ensuite dans cette bibliothèque beaucoup de méthodes telles que les suivantes : Type de file d’attente Create Existe Delete Send Receive Peek Purge ReceiveById PeekById BeginReceive (BeginPeek) Description Permet de créer une file d’attente avec un chemin spécifié. Il faut ensuite ajouter le using (Import).NET.

2.2. Permet de récupérer les files d’attente publiques sur l’ordinateur spécifié. Il faut donner en paramètre le chemin d’accès vers notre file d’attente préalablement créée.Exists(@".Exists(". puis « Message journal » qui reçoit les messages journaux. 3. Remarque : Ici la file créée est privée pour la création d’une file d’attente publique il suffira simplement d’enlever le « Private$ » et donc « .\MaFilePublique ».Create(@". //C# MessageQ1 = new MessageQueue(@". on retrouve « Message de file d’attente » qui est la file d’attente pour les messages dit normaux.NET MessageQ1 = New MessageQueue(". Dotnet France Association . //C# if (!MessageQueue.\Private$\MaFilePrivee") Then MessageQueue. Dans l’onglet « MaFilePrivee ».1 Création d’une file d’attente privée Pour créer une file d’attente privée.3 Création de message Avant d’envisager l’envoi d’un message. En effet.\Private$\MaFilePrivee"). cette déclaration permet d’utiliser simplement toutes les méthodes et propriétés pour chaque file d’attente. Permet de récupérer les files d’attente publiques sur le réseau. ‘VB.2. Label ou encore ReponseQueue.NET If Not MessageQueue. En se rendant dans l’onglet service puis message queuing et enfin file d’attente privée.\Private$\MaFilePrivee")) { MessageQueue.13 [Le MSMQ] [Date : 10/10/09] Permet de terminer la réception asynchrone spécifiée.\Private$\MaFilePrivee").\Private$\MaFillePrivee") End If Ici. EndReceive (EndPeek) GetAllMessages GetPrivateQueueBy Machine GetPublicQueue GetPublicQueueByM achine 3. si ce n’est le cas il convient de la créer.Create(". Pour cela il suffit d’initialiser le message et de remplir certains champs tels que Body.2 Déclaration de la file d’attente Avant de commencer à utiliser la file d’attente. Permet de retourner tous les messages de la liste d’attente Permet de récupérer les files d’attente privées sur l’ordinateur spécifié. il faut le créer.\Private$\MaFilePrivee") 3. il faut au préalable vérifier si elle existe déjà . on teste l’existence de la file d’attente privée « MaFilePrivee » avant de la créer. } ‘VB. il faut la déclarer.

On en dénombre cinq.\private$\MaFileReponse") Ici notre message « msgsend » a un string comme corps. MessageQueueTrans actionType) Send (Object.ResponseQueue = new MessageQueue(@". « Entete de mon message » comme Label et comme reponseQueue.NET Dim msg As New System.Messaging. Envoi d’un objet à une file d’attente.14 [Le MSMQ] [Date : 10/10/09] //C# System. msg. MessageQueueTrans action) Send (Object.Body = "Corps de mon message". j’utilise l’Espace de nom complet. String. Envoi d’un objet à une file d’attente transactionnelle et avec une étiquette (Label).Message() msg. Envoi d’un objet à une file d’attente et avec une étiquette (Label). msg.Messaging. String) Send (Object.Label = "Entete de mon message".ResponseQueue = New MessageQueue(".Messaging. Il existe plusieurs surcharges à cette méthode.2.Label = "Entete de mon message" msg. car il existe d’autres classes message qui pourraient dérouter l’ordinateur lors de la compilation (c’est notamment le cas en Windows Form). MessageQueueTrans action) Send (Object. mentionné ici est un Label visible dans la console Management Microsoft dans l’onglet MessageQueuing. Dotnet France Association . rien de plus simple : il suffit d’utiliser la méthode Send(…) comme vu précédemment. msg.Message msg = new System.\private$\MaFileReponse"). le Label du message lui correspond à une propriété du message qui peut être récupéré.Message(). celles-ci diffèrent au niveau des paramètres. la file d’attente privée « reponseq » Remarque : dès cet exemple. Envoi d’un objet à une file d’attente transactionnelle.Body = "Corps de mon message" msg. String. 3. Remarque : le label. ‘VB.4 Envoi d’un message Pour l’envoi d’un message. MessageQueueTrans actionType) Description Envoi d’un objet à une file d’attente non transactionnelle Envoi d’un objet à une file non d’attente transactionnelle et avec une étiquette (Label). Type de Send Send(Object) Send (Object.

il existe plusieurs types de méthode Receive() : Type de Send MessageQueue. Il provoquera tel un appel de service synchrone. msgin = MessageQ1.Message().Send(msgout) 3. ‘VB.Rece ive (MessageQueueTran sactionType) Description Reçoit le premier message disponible. un ralentissement voire une fenêtre « votre programme a cessé de fonctionner ».Message msgin = new System. nous allons voir les différentes méthodes avec Receive(). msgout. puis ensuite faire appel à la méthode Receive().Receive(). il faut commencer par déclarer la file d’attente comme vu précédemment.Send(msgout).5 Réception d’un message Pour la réception d’un message. s’il n’existe pas de message dans la file. MessageQ1.NET Dim msgin As New System. les priorités ne sont pas disponibles en mode WorkGroup).Messaging.2.Message msgout = new System. msgout. Reçoit le premier message disponible dans une file transactionnelle.Body = "Wahouuu" msgout. Où l’on peut ajouter comme paramètre TimeSpan Attend de recevoir un message dans le temps indiqué. comporte néanmoins quelques failles.Pour cela.Messaging. La réception d’un message par un programme est l’un des aspects essentiels de MSMQ.Rece ive () MessageQueue. Cette méthode qui est la plus simple et rapide. il faut noter que c’est très similaire avec Peek().Rece ive (MessageQueueTran saction) MessageQueue. Reçoit le premier message disponible avec spécification du type de la transaction.NET Dim msgout As New System.Message() msgout.Messaging. ‘VB.Receive() On peut donc récupérer les informations telles que le corps ou le Label et les afficher dans notre programme. pour rappel. Ainsi on peut récupérer le message le plus ancien de la file d’attente (ou avec une plus grande priorité . le programme va se bloquer dans l’attente d’un message.Label = "Mon Premier Message". sinon Dotnet France Association .Message() msgin = MessageQ1.Label = "Mon Premier Message" MessageQ1. En effet.Body = "Wahouuu".15 [Le MSMQ] [Date : 10/10/09] //C# System.Messaging. Pour recevoir les messages d’une file d’attente. Voici l’exemple le plus simple de réception de message //C# System.Messaging.Messaging.Message().

Messaging.6 Répondre à un message Lorsque le client attend une réponse précise à un message qu’il a envoyé. pour cela MSMQ a directement les outils nécessaires.Message(). que l’on trouve dans l’asynchrone . Dim msgin As System.3 Exemple Pour notre exemple.ResponseQueue.Message msgin = MessageQ1. //code exécuter durant la réception du message. Le nouveau message contiendra un nom ou pseudo et sera envoyé par message queuing à un serveur qui rajoutera « hello » et répondra sur la file réponse prédéfini dans le message. avec la présence de BeginReceive et EndReceive.Message = MessageQ1.BeginReceive() 'code exécuter durant la réception du message.Messaging.Message msg = new System. Attend de recevoir un message dans le temps indiqué. TimeSpan. //C# msgin.BeginReceive().NET Dim msg As New System. L’utilisation de ces deux méthodes est en tout point similaire à BeginInvoke et EndInvoke.NET Dim iarR As IAsyncResult = MessageQ1.\private$\MaFileReponse"). grâce à la méthode suivante qui remplace la méthode Send().EndReceive(iarR). ‘VB. nous allons utiliser deux ordinateurs sur un même réseau LAN. Cursor Comme vu dans le chapitre précédent.EndReceive(iarR) 3. et une TextBox pour créer de nouveaux messages. sinon renvoie une exception.Send(msgout). msg. ‘VB.16 [Le MSMQ] [Date : 10/10/09] renvoie une exception.ResponseQueue = New MessageQueue(".2.Messaging. il peut ajouter une propriété ReponseQueue et donner ainsi au serveur une file d’attente dans laquelle il récupèrera la réponse. Cursor conserve une position spécifique dans la file d’attente. Là encore on utilise le using « System. Dotnet France Association . Notre programme est conçu en Winform.Send(msgout) Ainsi on pourra récupérer des messages réponse dans la file d’attente privée « MaFileReponse ».Treading » et l’on crée un objet IAsyncResult //C# IAsyncResult iarR = MessageQ1. ‘VB.ResponseQueue = new MessageQueue(@".Message() msg. 3.Messaging.NET msgin.Messaging. L’interface utilisateur Winform propose une ListBox pour l’affichage des résultats. //C# System.\private$\MaFileReponse") Le serveur peut travailler sur le message puis le renvoyer au client sur la file d’attente indiquée par le client.ResponseQueue. System. il existe une autre solution.

Si vous ne disposez que d’un ordinateur avec MSMQ.5. » qui indiquera localhost au programme et utilisera des chaines locales.17 [Le MSMQ] [Date : 10/10/09] Mon premier ordinateur a pour IP : 192.0. Ma fenêtre Winform (Form1) est constituée de la manière suivante : Et voici le code Client (application Winform) : Dotnet France Association .168.168. vous pouvez remplacer les IP par un « . le second a pour IP : 192.0.6.

System.0.Text. } catch { listBox1. System.Runtime.Formatter = new XmlMessageFormatter(new String[] { "System.Threading.5\private$\reponseq"). } private void button1_Click(object sender.Text.Add("Temps d'attente dépassé").Remoting. IAsyncResult iarR = MessageQ2.Channels. } } private void button2_Click(object sender. System.Items. msgsend.Remoting.Items.Remoting.Messaging.Add(msg.Message().Body = textBox1. System.Messaging.\Private$\reponseq")) { MessageQueue.Channels.0.FromMilliseconds(500)).Forms.18 [Le MSMQ] [Date : 10/10/09] //C# using using using using using using using using System. if (!MessageQueue.Tcp.\Private$\reponseq").Create(@". namespace testmsqn { public partial class Form1 : Form { private MessageQueue MessageQ1.String" }).168. listBox1.Message msg = MessageQ2.Windows.Clear().Messaging. MessageQ2. System. listBox1.ResponseQueue = new MessageQueue(@"FormatName:DIRECT=TCP:192. System.Exists(@". System.Items. System. EventArgs e) { try { MessageQ1. msgsend. private MessageQueue MessageQ2.Body).Messaging.Message msgsend = new System.Send(msgsend).6\myqueue").BeginReceive(TimeSpan.168. } } } Dotnet France Association .EndReceive(iarR). } MessageQ1 = new MessageQueue(@". MessageQ2 = new MessageQueue(@"FormatName:DIRECT=TCP:192. public Form1() { InitializeComponent().\Private$\reponseq"). EventArgs e) { System.Runtime.Runtime.

BeginReceive(TimeSpan.Exists(".Send(msgsend) End Sub End Class End Namespace Notre serveur est lui un programme console qui rajoutera à la chaine de départ « hello » et « !!! » : Dotnet France Association .Text System.Add(msg. ByVal e As EventArgs) Dim msgsend As New System.Create(".Message = MessageQ2.168.Body) Catch listBox1.Messaging.Remoting.Items.Items.Runtime.Threading System.\Private$\reponseq") Then MessageQueue.String"}) Dim iarR As IAsyncResult = MessageQ2.FromMilliseconds(500)) Dim msg As System.\Private$\reponseq") End If MessageQ1 = New MessageQueue(".Messaging.0.Forms System.Message() msgsend.\Private$\reponseq") MessageQ2 = New MessageQueue("FormatName:DIRECT=TCP:192.Messaging System.Channels System.Runtime.6\myqueue") listBox1.Clear() End Sub Private Sub button1_Click(ByVal sender As Object.NET Imports Imports Imports Imports Imports Imports Imports Imports System System.Body = textBox1.Channels.Windows.Items.Formatter = New XmlMessageFormatter(New [String]() {"System.Remoting System.19 [Le MSMQ] [Date : 10/10/09] ‘VB.ResponseQueue = New MessageQueue("FormatName:DIRECT=TCP:192.Add("Temps d'attente dépassé") End Try End Sub Private Sub button2_Click(ByVal sender As Object.Remoting.Tcp Namespace testmsqn Partial Public Class Form1 Inherits Form Private MessageQ1 As MessageQueue Private MessageQ2 As MessageQueue Public Sub New() InitializeComponent() If Not MessageQueue.Runtime.Text msgsend. ByVal e As EventArgs) Try MessageQ1.EndReceive(iarR) listBox1.0.5\private$\reponseq") MessageQ2.168.

namespace testmsmqS { class Program { static void Main(string[] args) { Console.Body = Helloman(msgin.\Private$\myqueue"). System.Formatter = new XmlMessageFormatter(new String[] { "System. if (!MessageQueue. Console. System.Send(msgin).Linq. System. MessageQ. while (true) { Thread.Text.WriteLine(msgin. } MessageQueue MessageQ = new MessageQueue(@".Message msgin = MessageQ.\Private$\myqueue")) { MessageQueue.EndReceive(iarR).ToString()). System.Generic.Collections. System.Messaging.20 [Le MSMQ] [Date : 10/10/09] //C# using using using using using using System.Body.FromMilliseconds(500)).Threading. } } } Dotnet France Association .Body.ToString()).String" }).BeginReceive(TimeSpan.ResponseQueue. msgin.WriteLine("GO Serveur").\Private$\myqueue"). System.Sleep(500).Exists(@". } catch { } } } static string Helloman(string msg) { msg = "Hello " + msg + " !!!".Messaging. return msg.Create(@". msgin. try { IAsyncResult iarR = MessageQ.

Body = Helloman(msgin.Sleep(500) MessageQ.ResponseQueue.ToString()) msgin. puis on fait recevoir : dans ce cas la ListBox affiche « Délai d’attente dépassé » Si au contraire on envoie un message à un serveur lancé.ToString()) Console.Body.Text System.Send(msgin) Catch End Try End While End Sub Private Shared Function Helloman(ByVal msg As String) As String msg = "Hello " & msg & " !!!" Return msg End Function End Class End Namespace Une fois le programme lancé plusieurs situations peuvent se présenter :  On clique sur le bouton recevoir mais la file d’attente ne contient aucun message ou on envoie un message au serveur.EndReceive(iarR) msgin.Messaging System.Formatter = New XmlMessageFormatter(New [String]() {"System.Threading Namespace testmsmqS Class Program Private Shared Sub Main(ByVal args As String()) Console.Linq System.Message = MessageQ. un clic sur recevoir permet de l’afficher.Body. qui lui n’est pas lancé. et que celui-ci répond.21 [Le MSMQ] [Date : 10/10/09] Imports Imports Imports Imports Imports Imports System System.Exists(".  Dotnet France Association .\Private$\myqueue") While True Thread.Generic System.String"}) Try Dim iarR As IAsyncResult = MessageQ.FromMilliseconds(500)) Dim msgin As System.WriteLine(msgin.Collections.Messaging.\Private$\myqueue") End If Dim MessageQ As New MessageQueue(".Create(".\Private$\myqueue") Then MessageQueue.BeginReceive(TimeSpan.WriteLine("GO Serveur") If Not MessageQueue.

22 [Le MSMQ] [Date : 10/10/09] Dotnet France Association .

23 [Le MSMQ] [Date : 10/10/09] Dotnet France Association .

nous avons vu comment utiliser le MSMQ.24 [Le MSMQ] [Date : 10/10/09] 4 Conclusion Dans ce chapitre. à l’aide d’un exemple final. Nous avons parcouru les différents types de message et de file d’attente et. montré comment en tirer profit. Dotnet France Association . le message Queuing proposé par Microsoft.

You're Reading a Free Preview

Télécharger
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->