MSMQ和ProtoBuf网络序列化c#

MSMQ和ProtoBuf网络序列化c#,c#,protobuf-net,C#,Protobuf Net,我有一个具有许多属性的类,其中一个是byte[]属性。我想使用MSMQ将此类发送到另一台服务器。但在发送它之前,我想用ProtoBuf Net对它进行序列化。是否可以将ProtoBuf网络序列化程序连接到MSMQ 坦率地说,我不明白如何把班级排成队。我尝试使用下面的代码将类放入MSMQ队列,但出现异常“生成XML文档时出错” EntityBase是我想发送的一个类。以前,我使用了自己的基于文件系统的消息传递系统和ProtoBuf Net来序列化类 const string queueName =

我有一个具有许多属性的类,其中一个是byte[]属性。我想使用MSMQ将此类发送到另一台服务器。但在发送它之前,我想用ProtoBuf Net对它进行序列化。是否可以将ProtoBuf网络序列化程序连接到MSMQ

坦率地说,我不明白如何把班级排成队。我尝试使用下面的代码将类放入MSMQ队列,但出现异常“生成XML文档时出错”

EntityBase是我想发送的一个类。以前,我使用了自己的基于文件系统的消息传递系统和ProtoBuf Net来序列化类

const string queueName = @".\private$\TestQueue";

private static void SendMessageToQueue(EntityBase entity)
{
    // check if queue exists, if not create it
    MessageQueue msMq = null;
    if (!MessageQueue.Exists(queueName))
    {
        msMq = MessageQueue.Create(queueName);
    }
    else
    {
        msMq = new MessageQueue(queueName);
    }
    try
    {

        msMq.Send(entity);
    }
    catch (MessageQueueException ee)
    {
        Console.Write(ee.ToString());
    }
    catch (Exception eee)
    {
        Console.Write(eee.ToString());
    }
    finally
    {
        msMq.Close();
    }
    Console.WriteLine("Message sent ......");
}

我的建议是:发送
字符串
字节[]
作为消息;您可以通过以下方式执行此操作:

byte[] body;
using(var ms = new MemoryStream()) {
    Serializer.Serialize(ms, entity);
    body = ms.ToArray();
}
然后
Send(body)
,或者如果需要
字符串
,则
Send(Convert.ToBase64String(body))
。把这个倒过来作为另一端

似乎还有一种机制可以将
消息
IMessageFormatter
一起传递,但我不确定这是否值得。阅读示例:

Message msg = // receive
byte[] body = (byte[])msg.Body;
EntityBase entity;
using(var ms = new MemoryStream(body)) {
    entity = Serializer.Deserialize<EntityBase>(ms);
}

原虫网?这是质量判断吗?对不起,Protobuf NET,您的产品非常适合系列化需求:)
string base64 = (string)msg.Body;
byte[] body = Convert.FromBase64String(base64);
// as before