如何避免下面的MSMQ发送方和接收方创建的InvalidOperationException?我们非常感谢您提供的任何帮助!
我感觉它可能与发件人的BodyType属性有关,但我不知道该属性的正确值域。
发件人代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Messaging;
namespace MSMQTester
{
class Program
{
static void Main(string[] args)
{
MessageQueue q = new MessageQueue(@"lab\test");
q.Formatter = new ActiveXMessageFormatter();
Message msg = new Message();
msg.Priority = MessagePriority.High;
msg.Body = "<hello_world />";
msg.Label = "test1";
q.Send(msg);
}
}
}
收件人代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Messaging;
namespace MSMQViewer
{
class Program
{
static void Main(string[] args)
{
MessageQueue q = new MessageQueue(@"lab\test");
q.Formatter = new ActiveXMessageFormatter();
while (true)
{
Message msg = q.Receive();
Console.WriteLine(msg.Body);
}
}
}
}
错误讯息:
C:\ dev的\ MSMQTester \ MSMQViewer \ BIN \调试和GT; MSMQViewer.exe
未处理的异常:System.InvalidOperationException:无法反序列化我 ssage作为参数传递。无法识别序列化格式。 在System.Messaging.ActiveXMessageFormatter.Read(消息消息) 在System.Messaging.Message.get_Body() at c:\ dev \ MSMQTester \ MSMQViewer \ Pro中的MSMQViewer.Program.Main(String [] args) gram.cs:第18行
答案 0 :(得分:1)
如果您也遇到此问题,可以考虑使用以下方法:
System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(strQueue);
queue.Formatter = new System.Messaging.ActiveXMessageFormatter();
queue.DefaultPropertiesToSend.Priority = System.Messaging.MessagePriority.High;
queue.Send(" Message as string... Not a message object! :( ");
在上面的例子中,我能够在将优先级设置为高的同时传递消息,同时避免异常。