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