Tengo un MSMQ privado creado en mi máquina local. Estoy enviando mensajes a la cola usando el siguiente código de C#. Cuando cambié la cola para que fuera transaccional, el mensaje no llega al MSMQ. Sin embargo, no hay excepción lanzada en el método de envío. ¿Qué cambio necesito hacer para que funcione?El mensaje no llega a MSMQ cuando se realiza la transacción
using System;
using System.Messaging;
using System.Data;
public partial class _Default : System.Web.UI.Page
{
//Sharing violation resulted from queue being open already for exclusive receive.
MessageQueue helpRequestQueue = new MessageQueue(@".\Private$\MyPrivateQueue", false);
protected void Page_Load(object sender, EventArgs e)
{
bool isTransactionalQueue = false;
if (!System.Messaging.MessageQueue.Exists(@".\Private$\MyPrivateQueue"))
{
System.Messaging.MessageQueue.Create(@".\Private$\MyPrivateQueue", isTransactionalQueue);
}
SendMessage();
GetAllMessages();
}
private void SendMessage()
{
System.Messaging.Message theMessage = new System.Messaging.Message("TimeNow is "+DateTime.Now.ToString());
theMessage.Label = "Lijo " + DateTime.Now.ToString();
theMessage.Priority = System.Messaging.MessagePriority.Normal;
helpRequestQueue.Send(theMessage);
}
private void GetAllMessages()
{
DataTable messageTable = new DataTable();
messageTable.Columns.Add("Label");
messageTable.Columns.Add("Body");
//Set Message Filters
MessagePropertyFilter filter = new MessagePropertyFilter();
filter.ClearAll();
filter.Body = true;
filter.Label = true;
filter.Priority = true;
helpRequestQueue.MessageReadPropertyFilter = filter;
//Get All Messages
System.Messaging.Message[] messages = helpRequestQueue.GetAllMessages();
System.Messaging.XmlMessageFormatter stringFormatter = new System.Messaging.XmlMessageFormatter(new string[] { "System.String" });
for (int index = 0; index < messages.Length; index++)
{
string test = System.Convert.ToString(messages[index].Priority);
messages[index].Formatter = stringFormatter;
messageTable.Rows.Add(new string[] {messages[index].Label,messages[index].Body.ToString() });
}
Gridview1.DataSource = messageTable;
Gridview1.DataBind();
}
private void ReceiveAndProcess()
{
}
}
Mi conjetura es que la transacción tiene que estar comprometido. http://msdn.microsoft.com/en-us/library/windows/desktop/ms701273(v=vs.85).aspx –