MSMQ este folosit foarte des folosit în aplicațiile destok pentru a comunica intre doua sau mai multe procese. Citirea si scrierea unui mesaj in MSMQ se face extrem de simplu:
Daca o sa încercam sa trimitem prin MSMQ un mesaj cu conținut XML de genul:
Principalul avantaj este ca prin acest mod mesajele o sa poat sa fie consumate de catre COM-uri, totodată pe MSMQ dacă vizualizam mesaje din "Computer Management" o sa putem vedea conținutul lor clar, fără encoding. Un alt avantaj este modul de serializare pentru ActiveX, care este un mod foarte compact, a.i. mesajul o sa aibe o dimensiune foarte mica.
//Creare de mesaj.
System.Messaging.Message message = new System.Messaging.Message();
message.Body = "some text";
message.Label = "Test message";
//Initializare MSMQ.
var msmq;
if(MessageQueue.Exists(@".\Private$\NumeQueue"))
{
msmq = new System.Messaging.MessageQueue(@".\Private$\NumeQueue");
}
else
{
msmq = MessageQueue.Create(@".\Private$\NumeQueue");
}
/Trimitere mesaj
msmq.Send(message);.
/Citire mesaj.
try
{
message = mq.Receive(new TimeSpan(0, 0, 10));
}
catch
{
//Executa ceva in caz de eroare.
}
Pentru a primii un mesaj, putem sa ne inregistram la evenimentul "ReceiveCompleted" a unui MessageQueue.Daca o sa încercam sa trimitem prin MSMQ un mesaj cu conținut XML de genul:
<Text>
<Valoare>Test</Valoare>
</Text>
o sa observam ca pe MSMQ a ajuns un mesaj de forma:<Text>
<Valoare>Test</Valoare>
</Text>
Cea ce s-a întîmplat este normal, doar ca noi ne-am astepta sa obtinem prima varianta in momentul in care primim din MSMQ mesajul. O solutie rapida si la indemana este sa setam Formatter in momentul in care generam mesajul ca un obiect de tip ActiveXMessageFormatter.System.Messaging.Message message = new System.Messaging.Message();
message.Formatter = new ActiveXMessageFormatter();
message.Body = "some text";
message.Label = "Test message";
Trebuie avut grija doar ca in momentul in care cream obiectul pentru a citi din MSMQ sa setam propietatea"Formatter".if(MessageQueue.Exists(@".\Private$\NumeQueue"))
{
msmq = new System.Messaging.MessageQueue(@".\Private$\NumeQueue");
}
else
{
msmq = MessageQueue.Create(@".\Private$\NumeQueue");
}
msmq..Formatter = new ActiveXMessageFormatter();
Principalul avantaj este ca prin acest mod mesajele o sa poat sa fie consumate de catre COM-uri, totodată pe MSMQ dacă vizualizam mesaje din "Computer Management" o sa putem vedea conținutul lor clar, fără encoding. Un alt avantaj este modul de serializare pentru ActiveX, care este un mod foarte compact, a.i. mesajul o sa aibe o dimensiune foarte mica.
Comments
Post a Comment