Retrocoder
Retrocoder

Reputation: 4713

How to convert MSMQ message body into byte[]?

In my C# application I receive MSMQ messages. Sometimes the message body is XML which I can handle without any problems. Sometimes the message could be of any data type so I just need to put it into a database table. To do this I need to take the message body and convert it in a “byte[]” type. My question is, how to convert the message body into byte[]?

Upvotes: 1

Views: 2920

Answers (2)

barrypicker
barrypicker

Reputation: 10088

Building off of answer by stuartd (so others visiting this page don't need to hunt)...

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();
            }
        }
    }
}

Upvotes: 1

stuartd
stuartd

Reputation: 73253

The Message object has a BodyStream property which exposes the body as a Stream, which you can then convert to a byte[] using the technique in this answer.

Upvotes: 2

Related Questions