C# MSMQ 无效操作异常
C# MSMQ Invalid Operation Exception
我创建了一个基本应用程序来在 C# 中管理 MSMQ。
我用这个方法在我的交易消息队列中创建消息:
/// <summary>
/// Method to send message in message queue
/// </summary>
/// <param name="mq">message queue (to)</param>
/// <param name="messageBody">message body</param>
/// <param name="messageLabel">message label</param>
public static void sendMessage(MessageQueue mq, string messageBody, string messageLabel)
{
MessageQueueTransaction mqt = new MessageQueueTransaction();
try
{
Message m = new Message(messageBody, new XmlMessageFormatter(new String[] { "System.String,mscorlib" }));
m.BodyType = 0;
mqt.Begin();
mq.Send(m, messageLabel, mqt);
mqt.Commit();
}
catch (Exception ex)
{
string s = ex.Message;
mqt.Abort();
}
finally
{
mq.Close();
}
}
对于消息处理(在控制台中写入内容消息),我使用这个:
/// <summary>
/// Get all messages in MSMQ
/// </summary>
/// <param name="mq"> MSMQ </param>
public static void getMessage(MessageQueue mq)
{
Message[] messages = mq.GetAllMessages();
try
{
foreach (Message m in messages)
{
Console.WriteLine("Message" + m.Label = ": " + m.Body.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
所有消息都在消息数组中,但我在 foreach 语句的行中有一个无效操作异常。
当我使用调试器时,我可以看到很多消息 属性 有异常。
我只是想确保我在消息中发送标签和正文以便稍后获取。
send 或 get 方法有错误(或两者都有)? --谢谢
问题是您在发送时应用了自定义消息格式化程序,但在接收时却没有。如果您进一步调查该异常,您可能会在内部异常中看到更多详细信息,例如:"Cannot find a formatter capable of reading this message."
修复很简单。只需在接收队列上也设置相同的格式化程序:
queue.Formatter = new XmlMessageFormatter( new String[] {"System.String,mscorlib"} );
此外,您也可以使用它来发送队列。如果您发送多条消息,最好在队列中指定一次,而不是在每条消息始终相同的情况下分别指定它。
我创建了一个基本应用程序来在 C# 中管理 MSMQ。
我用这个方法在我的交易消息队列中创建消息:
/// <summary>
/// Method to send message in message queue
/// </summary>
/// <param name="mq">message queue (to)</param>
/// <param name="messageBody">message body</param>
/// <param name="messageLabel">message label</param>
public static void sendMessage(MessageQueue mq, string messageBody, string messageLabel)
{
MessageQueueTransaction mqt = new MessageQueueTransaction();
try
{
Message m = new Message(messageBody, new XmlMessageFormatter(new String[] { "System.String,mscorlib" }));
m.BodyType = 0;
mqt.Begin();
mq.Send(m, messageLabel, mqt);
mqt.Commit();
}
catch (Exception ex)
{
string s = ex.Message;
mqt.Abort();
}
finally
{
mq.Close();
}
}
对于消息处理(在控制台中写入内容消息),我使用这个:
/// <summary>
/// Get all messages in MSMQ
/// </summary>
/// <param name="mq"> MSMQ </param>
public static void getMessage(MessageQueue mq)
{
Message[] messages = mq.GetAllMessages();
try
{
foreach (Message m in messages)
{
Console.WriteLine("Message" + m.Label = ": " + m.Body.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
所有消息都在消息数组中,但我在 foreach 语句的行中有一个无效操作异常。 当我使用调试器时,我可以看到很多消息 属性 有异常。 我只是想确保我在消息中发送标签和正文以便稍后获取。 send 或 get 方法有错误(或两者都有)? --谢谢
问题是您在发送时应用了自定义消息格式化程序,但在接收时却没有。如果您进一步调查该异常,您可能会在内部异常中看到更多详细信息,例如:"Cannot find a formatter capable of reading this message."
修复很简单。只需在接收队列上也设置相同的格式化程序:
queue.Formatter = new XmlMessageFormatter( new String[] {"System.String,mscorlib"} );
此外,您也可以使用它来发送队列。如果您发送多条消息,最好在队列中指定一次,而不是在每条消息始终相同的情况下分别指定它。