如何将MSMQ消息体转换为byte []?

时间:2010-07-15 14:04:43

标签: c# casting msmq

在我的C#应用​​程序中,我收到了MSMQ消息。有时消息体是XML,我可以毫无问题地处理。有时消息可以是任何数据类型,所以我只需要将它放入数据库表中。为此,我需要获取消息体并将其转换为“byte []”类型。我的问题是,如何将消息体转换为byte []?

2 个答案:

答案 0 :(得分:2)

Message对象有一个BodyStream属性,它将主体公开为Stream,然后您可以使用this answer.

中的技术将其转换为byte []

答案 1 :(得分:0)

stuartd建立答案(因此访问此页面的其他人不需要打猎)......

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MSMQReader
{
    public class MSMQRead
    {
        public void DoIt()
        {
            var messageQueue = new System.Messaging.MessageQueue(@"FormatName:Direct=OS:<HOST NAME>\Private$\<PRIVATE QUEUE NAME>");
            var message = messageQueue.Receive(new TimeSpan(0, 0, 3)); // 3 SECOND TIMEOUT
            var messageBody = ConvertStreamToByteArray(message.BodyStream);
        }


        public byte[] ConvertStreamToByteArray(System.IO.Stream input)
        {
            byte[] buffer = new byte[16 * 1024];

            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
                int chunk;

                while ((chunk = input.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, chunk);
                }

                return ms.ToArray();
            }
        }
    }
}