Quizás el siguiente código sea útil para que alguien obtenga una introducción rápida a MSMQ.
Así que debe crear en la solución 3 aplicaciones.
- MessageTo (Windows Form) Add 1 button.
- MessageFrom (Windows Form) Add 1 richtextbox.
- MyMessage (Class Library) Add 1 class.
Solo copie el código anterior y pruébelo. Asegúrese de que MSMQ está instalado en su MS Windows y los proyectos 1 y 2 tienen referencia System.Messaging
.
1. MessageTo (Windows Form) Agregue 1 botón.
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) Añadir 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. MiMensaje (biblioteca de clases) Añadir 1 clase.
using System;
namespace MyMessage
{
[Serializable]
public sealed class MyMessage
{
public TimeSpan LifeInterval { get; set; }
public DateTime BornPoint { get; set; }
public string Text { get; set; }
}
}
Enjoy :)
lo que se ha reducido votar? Si sabes algo sobre el tema, Ok enséñanos a los demás. – Bohn
@Sascha: lea el comienzo de mi publicación: "He estado investigando durante más de una hora y encontré excelentes muestras de cómo usar MSMQ en C# e incluso un capítulo completo de un libro sobre Message Queue ... Pero para una prueba rápida lo único que necesito es cubrir este escenario, ni siquiera de manera perfecta, solo para una demostración rápida " – Bohn
Obteniendo problemas en MSMQ http://stackoverflow.com/questions/29225601/getting-the-queue-does-not- existe-o-usted-no-tiene-suficientes-permisos-a-p –