Le MSMQ. Version 1.0. Pierre-Franck Chauvet



Documents pareils
TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Créer et partager des fichiers

Sécurisation du réseau

PROCÉDURE D AIDE AU PARAMÉTRAGE

SOMMAIRE ÉTAPES OBLIGATOIRES. Récupérer le connecteur... 3

sommaire ÉTAPES OBLIGATOIRES Récupérer le connecteur... 3

Guide de configuration. Logiciel de courriel

TUTORIEL RADIUS. I. Qu est-ce que RADIUS? II. Création d un groupe et d utilisateur

Administration Centrale : Opérations

Tutorial Terminal Server sous

Développement d un logiciel de messagerie instantanée avec Dotnet (version simplifiée)

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

Manuel d utilisation du web mail Zimbra 7.1

Création d un compte Exchange (Vista / Seven)

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

Installation et utilisation du client FirstClass 11

Déployer une application cliente avec le Framework.NET 3.5 Client Profile

GUIDE D INSTALLATION INTERNET haute vitesse

Programme Compte bancaire (code)

Module.NET 3 Les Assemblys.NET

Installation de GFI MailEssentials

Cours 420-KEG-LG, Gestion de réseaux et support technique. Atelier No2 :

Hébergement et configuration de services WCF. Version 1.0

Installation d'un Active Directory et DNS sous Windows Server 2008

SOMMAIRE. 1. Connexion à la messagerie Zimbra Pré-requis Ecran de connexion à la messagerie 4

Afin d accéder à votre messagerie personnelle, vous devez vous identifier par votre adresse mail et votre mot de passe :

Mettre en place un accès sécurisé à travers Internet

Installation et configuration de base de l active Directory

Gestion du cache dans les applications ASP.NET

INSTALLATION ET PRISE EN MAIN

Guide Utilisateur. Edition Mars Agenda. s. Evènements. Synchroniser avec les identités de gestion, de. Messagerie interne. Post-it.

Guide SQL Server 2008 pour HYSAS

Préparation à l installation d Active Directory

Microsoft Hosted Exchange 2010 DOCUMENT D EXPLOITATION

Manuel d utilisation de l outil collaboratif

Configuration de GFI MailArchiver

Chapitre 1 Labo 1 : Les rôles de base du contrôleur de domaine Windows 2008 Server R2

[OUTLOOK EXPRESS WINDOWS MAIL]

SERVICE CONTACT INSTANTANÉ GUIDE D UTILISATEUR

Gestionnaire des services Internet (IIS)

INSTALLATION DES SERVICES DE DOMAINE ACTIVE DIRECTORY Windows Server 2008 R2

Manuel utilisateur Centre de Messagerie

Configuration du nouveau Bureau Virtuel (BV) collaboratif de Lyon I

Connecteur Zimbra pour Outlook 2007 et 2010 (ZCO) w

L accès à distance du serveur

Tsoft et Groupe Eyrolles, 2005, ISBN :

Personnaliser le serveur WHS 2011

MANUEL D INSTALLATION

Manuel d installation et d utilisation du logiciel GigaRunner

Mise en place Active Directory / DHCP / DNS

SOMMAIRE. Comment se connecter?

Services Windows et Domaines d application

ContactForm et ContactFormLight - Gestionnaires de formulaire pour Prestashop Edité par ARETMIC S.A.

Assistance à distance sous Windows

Découvrez Windows NetMeeting

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Mise en route et support Envision 10 SQL server (Avril 2015) A l'intention de l'administrateur SQL Server et de l administrateur Envision

Comment déployer l'active Directory sur Windows Server 2008 R2. Microsoft France Division DPE

But de cette présentation

Manuel d utilisation du site web de l ONRN

Atelier Le gestionnaire de fichier

COUR D APPEL DE LYON PROCEDURE INFORMATIQUE IMPRIMANTES. Imprimantes SAR de Lyon / Novembre 2007 Page 1 sur 14

La messagerie électronique

Sécurisation des accès au CRM avec un certificat client générique

Système Principal (hôte) 2008 Enterprise x64

Documentation Honolulu 14 (1)

ScTools Outil de personnalisation de carte

Guide administrateur AMSP

Travaux pratiques Bureau à distance et assistance à distance dans Windows 7

Business Talk IP Centrex. guide. web utilisateur. pour. les services standards

Espace Numérique Régional de Santé Formation sur la messagerie sécurisée. Version Auteur : Nathalie MEDA

AFTEC SIO 2. Christophe BOUTHIER Page 1

Utilisation du client de messagerie Thunderbird

CONFIGURATION DE LA RECEPTION DES MAILS EN POPS.

INSTALLATION D UN PORTAIL CAPTIF PERSONNALISE PFSENSE

CAPTURE DES PROFESSIONNELS

Procédure pas à pas de découverte de l offre. Service Cloud Cloudwatt

KWISATZ MODULE PRESTASHOP

Manuel d utilisation de la messagerie.

Guide d utilisation de «Partages Privés»

Installation Windows 2000 Server

Allocation de l adressage IP à l aide du protocole DHCP.doc

Fonctionnement du courrier électronique

TP redondance DHCP. Gillard Frédéric Page 1/17. Vue d ensemble du basculement DHCP

Déclarer un serveur MySQL dans l annuaire LDAP. Associer un utilisateur DiaClientSQL à son compte Windows (SSO)

UserLock Guide de Démarrage rapide. Version 8.5

BTS SIO option SISR Lycée Godefroy de Bouillon Clermont-Ferrand

Mise en œuvre d une Gateway HTTP/HTTPS avec un serveur de Présentation en DMZ

Guide d installation. Routeur Zyxel VMG1312

Formateurs : Jackie DAÖN Franck DUBOIS Médiapôle de Guyancourt

Configurer le pare-feu de Windows XP SP2 pour WinReporter

Tropimed Guide d'installation

Cours CCNA 1. Exercices

NetCrunch 6. Superviser

Utiliser le portail d accès distant Pour les personnels de l université LYON1

NOTICE D UTILISATION

Administration du site

1. Aménagements technologiques 2. Installation de Microsoft SQL Server 2012

Manuel d utilisation du logiciel de messagerie personnelle Palm VersaMail 2.5

Guide d utilisation 2012

Transcription:

Le MSMQ Version 1.0 Z Pierre-Franck Chauvet

2 [Le MSMQ] [Date : 10/10/09] Sommaire 1 Introduction... 3 2 Le Concept... 5 2.1 Les messages... 5 2.2 Les files d attentes... 5 2.3 WorkGroup... 7 2.4 Active Directory... 7 3 Utilisation... 9 3.1 Activer le service... 9 3.2 Dans le code... 12 3.2.1 Création d une file d attente privée... 13 3.2.2 Déclaration de la file d attente... 13 3.2.3 Création de message... 13 3.2.4 Envoi d un message... 14 3.2.5 Réception d un message... 15 3.2.6 Répondre à un message... 16 3.3 Exemple... 16 4 Conclusion... 24

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. Cette technologie est le MOM (Message Oriented Middleware) par Microsoft ; c est l infrastructure qui permet un couplage d application grâce à des files d attente et des messages. Cette technologie est implantée depuis Windows 95 avec MSMQ v1.0, v2.0 sur Windows 2000, v3.0 sur Windows X et Serveur 2003, actuellement la v4.0 pour Windows Vista, 7 et Server2008. Les files d attente de messages sont des liaisons asynchrones entre plusieurs processus. Dans ce chapitre, nous allons étudier les files d attente MSMQ Microsoft et comment interagir avec dans nos programme.net. 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, ce qui apporte tous les avantages exposés dans le cours précédant (voir le chapitre sur Le.NET Remoting One-Way et Asynchrone). Mais le Remoting asynchrone impliquait le fait que le client et le serveur s exécutent en même temps. Ici, 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é. Du coup, le Message Queuing peut s exécuter dans un environnement déconnecté. 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, et les envoyer une fois le serveur connecté. De même, si les calculs serveur prennent du temps et que le client se déconnecte, il sera toujours possible de récupérer les résultats lors de la prochaine connexion. L exemple le plus simple est de le comparer à un système de messagerie électronique (e-mail). En effet, on peut assimiler les messages e-mail aux messages MSMQ, les boîtes e-mail aux files d attente MSMQ, et les utilisateurs aux applications. Attention, ceci est un exemple général, en effet les services de messagerie électronique sont centralisés et n utilisent pas plusieurs chemins d accès tels que MSMQ, 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 utilisateur choisi ce qu il fait de ses mails (archivage, suppression).

4 [Le MSMQ] [Date : 10/10/09]

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

6 [Le MSMQ] [Date : 10/10/09] Dead-letter Administration Réponse Rapport Système Est la file d attente où finissent les messages erronés. 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. Reçoit les messages de type «Acknowledgement» Peut être paramétrée pour recevoir les réponses de certains messages. Files qui peut être créée en changeant le type d une file d attente privée ou publique Files d attente privées, elles sont utilisées pour des messages d administration, d archivage de notification ou pour garantir l ordre correct des messages transactionnels. 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, 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 «.\Private$\NomDeLaQueuePrivée» Le nom de format : à privilégier pour de la programmation, le nom de format existe sous plusieurs formes. 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. «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.168.0.5\$Private\NomDeLaQueuePrivée» http : permet de spécifier l adresse URL. Remarque : pour le protocole http (et seulement ce protocole) il est possible d utiliser des slashes ou des antislashes. «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 :PFCH5- Laptop\NomDeLaQueuePublique,DIRECT =TCP :192.168.0.5\Private$\ NomDeLaQueue Privée»

7 [Le MSMQ] [Date : 10/10/09] Type de file d attente Publique Privée Journal Dead-letter Syntaxe NomDelaMachine\NomDeLaQueuePublique NomDelaMachine\Private$\NomDeLaQueuePrivée NomDelaMachine\NomDelaQueue\Journal$ NomDeLaMAchine\Deadletter$ 2.3 WorkGroup L utilisation de MSMQ peut se faire selon 3 modes distincts : Domaines d application (Windows Serveur) : utilise l active directory. 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. Chacun de ces modes présente des particularités et restrictions propres. 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). 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). 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. 2.4 Active Directory Active Directory est la mise en en œuvre des services d annuaires dans un environnement Windows. Il permet des services de centralisation et d authentification sur un réseau utilisant Windows. Ainsi les différents postes Windows, Imprimantes ou autres machines réseau sont répertoriées. De plus, Active Directory prend aussi en compte les Comptes utilisateurs, et dossier partagés. Mis en place avec Windows Server 2000, il équipe depuis Windows 2003 et 2008. 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). L Arbre représente l ensemble des conteneurs et feuilles de l Active Directory. Domaine représente un conteneur ou une feuille.

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

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

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. Une fois ce service coché, 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», ou en tapant «MMC» dans le champs de recherche, puis fichier, ouvrir «compmgmt.msc».

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

12 [Le MSMQ] [Date : 10/10/09] 3.2 Dans le code Il est possible d utiliser le Message Queuing dans les programmes.net. Pour cela il est essentiel d ajouter la référence «System.Messaging» qui donnera accès à tous les outils de gestion des messages. Il faut ensuite ajouter le using (Import). //C# using System.Messaging; VB.NET Imports System.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é. Permet de vérifier l existence ou non d une file d attente avec le chemin spécifié. Permet de supprimer une file d attente. Permet l envoi d un objet dans une file d attente. 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. 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, le supprime de celle ci et avertit le gestionnaire d évènement une fois terminé (sans le supprimer pour BeginPeek)

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

14 [Le MSMQ] [Date : 10/10/09] //C# System.Messaging.Message msg = new System.Messaging.Message(); msg.body = "Corps de mon message"; msg.label = "Entete de mon message"; msg.responsequeue = new MessageQueue(@".\private$\MaFileReponse"); VB.NET Dim msg As New System.Messaging.Message() msg.body = "Corps de mon message" msg.label = "Entete de mon message" msg.responsequeue = New MessageQueue(".\private$\MaFileReponse") Ici notre message «msgsend» a un string comme corps, «Entete de mon message» comme Label et comme reponsequeue, la file d attente privée «reponseq» Remarque : dès cet exemple, j utilise l Espace de nom complet, 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). 3.2.4 Envoi d un message Pour l envoi d un message, rien de plus simple : il suffit d utiliser la méthode Send( ) comme vu précédemment. Il existe plusieurs surcharges à cette méthode. On en dénombre cinq, celles-ci diffèrent au niveau des paramètres. Type de Send Send(Object) Send (Object, String) Send (Object, MessageQueueTrans action) Send (Object, String, MessageQueueTrans action) Send (Object, MessageQueueTrans actiontype) Send (Object, String, 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). Envoi d un objet à une file d attente transactionnelle. Envoi d un objet à une file d attente transactionnelle et avec une étiquette (Label). Envoi d un objet à une file d attente. Envoi d un objet à une file d attente et avec une étiquette (Label). Remarque : le label, mentionné ici est un Label visible dans la console Management Microsoft dans l onglet MessageQueuing, le Label du message lui correspond à une propriété du message qui peut être récupéré.

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

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

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

18 [Le MSMQ] [Date : 10/10/09] //C# using System; using System.Text; using System.Windows.Forms; using System.Messaging; using System.Threading; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; namespace testmsqn public partial class Form1 : Form private MessageQueue MessageQ1; private MessageQueue MessageQ2; public Form1() InitializeComponent(); if (!MessageQueue.Exists(@".\Private$\reponseq")) MessageQueue.Create(@".\Private$\reponseq"); MessageQ1 = new MessageQueue(@".\Private$\reponseq"); MessageQ2 = new MessageQueue(@"FormatName:DIRECT=TCP:192.168.0.6\myqueue"); listbox1.items.clear(); private void button1_click(object sender, EventArgs e) try MessageQ1.Formatter = new XmlMessageFormatter(new String[] "System.String" ); IAsyncResult iarr = MessageQ2.BeginReceive(TimeSpan.FromMilliseconds(500)); System.Messaging.Message msg = MessageQ2.EndReceive(iarR); listbox1.items.add(msg.body); catch listbox1.items.add("temps d'attente dépassé"); private void button2_click(object sender, EventArgs e) System.Messaging.Message msgsend = new System.Messaging.Message(); msgsend.body = textbox1.text; msgsend.responsequeue = new MessageQueue(@"FormatName:DIRECT=TCP:192.168.0.5\private$\reponseq"); MessageQ2.Send(msgsend);

19 [Le MSMQ] [Date : 10/10/09] VB.NET Imports System Imports System.Text Imports System.Windows.Forms Imports System.Messaging Imports System.Threading Imports System.Runtime.Remoting Imports System.Runtime.Remoting.Channels Imports System.Runtime.Remoting.Channels.Tcp Namespace testmsqn Partial Public Class Form1 Inherits Form Private MessageQ1 As MessageQueue Private MessageQ2 As MessageQueue Public Sub New() InitializeComponent() If Not MessageQueue.Exists(".\Private$\reponseq") Then MessageQueue.Create(".\Private$\reponseq") End If MessageQ1 = New MessageQueue(".\Private$\reponseq") MessageQ2 = New MessageQueue("FormatName:DIRECT=TCP:192.168.0.6\myqueue") listbox1.items.clear() End Sub Private Sub button1_click(byval sender As Object, ByVal e As EventArgs) Try MessageQ1.Formatter = New XmlMessageFormatter(New [String]() "System.String") Dim iarr As IAsyncResult = MessageQ2.BeginReceive(TimeSpan.FromMilliseconds(500)) Dim msg As System.Messaging.Message = MessageQ2.EndReceive(iarR) listbox1.items.add(msg.body) Catch listbox1.items.add("temps d'attente dépassé") End Try End Sub Private Sub button2_click(byval sender As Object, ByVal e As EventArgs) Dim msgsend As New System.Messaging.Message() msgsend.body = textbox1.text msgsend.responsequeue = New MessageQueue("FormatName:DIRECT=TCP:192.168.0.5\private$\reponseq") MessageQ2.Send(msgsend) End Sub End Class End Namespace Notre serveur est lui un programme console qui rajoutera à la chaine de départ «hello» et «!!!» :

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

21 [Le MSMQ] [Date : 10/10/09] Imports System Imports System.Collections.Generic Imports System.Linq Imports System.Text Imports System.Messaging Imports System.Threading Namespace testmsmqs Class Program Private Shared Sub Main(ByVal args As String()) Console.WriteLine("GO Serveur") If Not MessageQueue.Exists(".\Private$\myqueue") Then MessageQueue.Create(".\Private$\myqueue") End If Dim MessageQ As New MessageQueue(".\Private$\myqueue") While True Thread.Sleep(500) MessageQ.Formatter = New XmlMessageFormatter(New [String]() "System.String") Try Dim iarr As IAsyncResult = MessageQ.BeginReceive(TimeSpan.FromMilliseconds(500)) Dim msgin As System.Messaging.Message = MessageQ.EndReceive(iarR) msgin.body = Helloman(msgin.Body.ToString()) Console.WriteLine(msgin.Body.ToString()) msgin.responsequeue.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, qui lui n est pas lancé, 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é, et que celui-ci répond, un clic sur recevoir permet de l afficher.

22 [Le MSMQ] [Date : 10/10/09]

23 [Le MSMQ] [Date : 10/10/09]

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