使用ActiveXMessageFormatter读取MSMQ时如何解决InvalidOperationException?

时间:2009-07-23 18:53:48

标签: .net msmq

如何避免下面的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行

1 个答案:

答案 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! :(  ");

在上面的例子中,我能够在将优先级设置为高的同时传递消息,同时避免异常。