Минимальный минимум, необходимый для написания примера приложения MSMQ

Я занимаюсь исследованиями более часа и нахожу отличные образцы того, как использовать MSMQ на C # и даже одну полную главу книги о очереди сообщений … Но для быстрого теста все, что мне нужно, это охватить этот сценарий, даже не в идеальном виде, просто для быстрой демонстрации:

«Приложение A»: записывает сообщение в очередь сообщений. (Приложение A – это служба Windows C #). Теперь я открываю «Приложение B» (это приложение для winforms C #), и я проверяю MSMQ, и вижу, что у меня появилось новое сообщение.

Вот и все … Мне нужна простая демонстрация.

Может ли кто-нибудь помочь мне с примером кода для этого? Очень признателен.

//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(); 

Для более сложного сценария вы можете использовать объекты Message для отправки сообщения, обернуть свой собственный объект classа внутри него и пометить свой class как сериализуемый. Также убедитесь, что MSMQ установлен в вашей системе

Возможно, код ниже будет полезен для того, чтобы кто-то просто быстро ввел MSMQ .

Таким образом, вы должны создавать приложения 3-го уровня.

  1. Кнопка MessageTo (Windows Form) Добавить 1.
  2. MessageFrom (Windows Form) Добавить 1 richtextbox.
  3. MyMessage (Class Library) Добавьте 1 class.

Просто скопируйте предыдущий код и попробуйте. Сделайте suer, который MSMQ установлен на вашей MS Windows, а proyects 1 и 2 имеют ссылку на System.Messaging .

1. Кнопка MessageTo (Windows Form) Добавить 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) Добавьте 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) Добавьте 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; } } } 

Наслаждаться 🙂

Давайте будем гением компьютера.