Il minimo indispensabile per scrivere un’applicazione di esempio MSMQ

Ho fatto ricerche per oltre un’ora e ho trovato ottimi esempi su come usare MSMQ in C # e persino un intero capitolo di un libro sulla coda dei messaggi … Ma per un test rapido tutto quello di cui ho bisogno è di coprire questo scenario, nemmeno in un modo perfetto, solo per una demo veloce:

“Applicazione A”: scrive un messaggio nella coda dei messaggi. (L’applicazione A è un servizio Windows C #) Ora apro “Applicazione B” (è un’applicazione C # winForms) e controllo MSMQ e vedo oh Ho un nuovo messaggio.

Questo è tutto … Tutto ciò di cui ho bisogno per una semplice demo.

Qualcuno potrebbe aiutarmi con un esempio di codice per questo? Molto apprezzato.

    //From Windows Service, use this code MessageQueue messageQueue = null; if (MessageQueue.Exists(@".\Private$\SomeTestName")) { messageQueue = new MessageQueue(@".\Private$\SomeTestName"); messageQueue.Label = "Testing Queue"; } else { // Create the Queue MessageQueue.Create(@".\Private$\SomeTestName"); messageQueue = new MessageQueue(@".\Private$\SomeTestName"); messageQueue.Label = "Newly Created Queue"; } messageQueue.Send("First ever Message is sent to MSMQ", "Title"); 

     //From Windows application MessageQueue messageQueue = new MessageQueue(@".\Private$\SomeTestName"); System.Messaging.Message[] messages = messageQueue.GetAllMessages(); foreach (System.Messaging.Message message in messages) { //Do something with the message. } // after all processing, delete all the messages messageQueue.Purge(); 

    Per uno scenario più complesso, è ansible utilizzare oggetti Message per inviare il messaggio, racchiudere il proprio object di class al suo interno e contrassegnare la class come serializzabile. Assicurati inoltre che MSMQ sia installato sul tuo sistema

    Forse il codice qui sotto sarà utile per qualcuno per ottenere una veloce introduzione a MSMQ .

    Quindi devi creare nelle app della soluzione 3.

    1. MessageTo (Windows Form) Aggiungi il pulsante 1.
    2. MessageFrom (Windows Form) Aggiungi 1 richtextbox.
    3. MyMessage (Class Library) Aggiungi 1 class.

    Basta copiare il codice passato e provarlo. Fai in modo che MSMQ sia installato su MS Windows e che Proyect 1 e 2 abbiano refernece su System.Messaging .

    1. MessageTo (Windows Form) Aggiungi il pulsante 1.

     using System; using System.Messaging; using System.Windows.Forms; namespace MessageTo { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { #region Create My Own Queue MessageQueue messageQueue = null; if (MessageQueue.Exists(@".\Private$\TestApp1")) { messageQueue = new MessageQueue(@".\Private$\TestApp1"); messageQueue.Label = "MyQueueLabel"; } else { // Create the Queue MessageQueue.Create(@".\Private$\TestApp1"); messageQueue = new MessageQueue(@".\Private$\TestApp1"); messageQueue.Label = "MyQueueLabel"; } #endregion MyMessage.MyMessage m1 = new MyMessage.MyMessage(); m1.BornPoint = DateTime.Now; m1.LifeInterval = TimeSpan.FromSeconds(5); m1.Text = "Command Start: " + DateTime.Now.ToString(); messageQueue.Send(m1); } } } 

    2. MessageFrom (Windows Form) Aggiungi 1 richtextbox.

     using System; using System.ComponentModel; using System.Linq; using System.Messaging; using System.Windows.Forms; namespace MessageFrom { public partial class Form1 : Form { Timer t = new Timer(); BackgroundWorker bw1 = new BackgroundWorker(); string text = string.Empty; public Form1() { InitializeComponent(); t.Interval = 1000; t.Tick += T_Tick; t.Start(); bw1.DoWork += (sender, args) => args.Result = Operation1(); bw1.RunWorkerCompleted += (sender, args) => { if ((bool)args.Result) { richTextBox1.Text += text; } }; } private object Operation1() { try { if (MessageQueue.Exists(@".\Private$\TestApp1")) { MessageQueue messageQueue = new MessageQueue(@".\Private$\TestApp1"); messageQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(MyMessage.MyMessage) }); System.Messaging.Message[] messages = messageQueue.GetAllMessages(); var isOK = messages.Count() > 0 ? true : false; foreach (System.Messaging.Message m in messages) { try { var command = (MyMessage.MyMessage)m.Body; text = command.Text + Environment.NewLine; } catch (MessageQueueException ex) { } catch (Exception ex) { } } messageQueue.Purge(); // after all processing, delete all the messages return isOK; } } catch (MessageQueueException ex) { } catch (Exception ex) { } return false; } private void T_Tick(object sender, EventArgs e) { t.Enabled = false; if (!bw1.IsBusy) bw1.RunWorkerAsync(); t.Enabled = true; } } } 

    3. MyMessage (Class Library) Aggiungi 1 class.

     using System; namespace MyMessage { [Serializable] public sealed class MyMessage { public TimeSpan LifeInterval { get; set; } public DateTime BornPoint { get; set; } public string Text { get; set; } } } 

    Godere 🙂