我有一个应用程序,显示MSMQ消息队列中的消息的内容.Windows 7上的MSMQ存在问题,而不是保留邮件正文中数据的真实对象类型.在这个例子中,我发送一个byte [],然后当我收到它时,它不再是一个字节数组,而是包装的XML容器文档.在Windows XP中,我从未遇到过此问题,并且Message.Body属性始终正确设置为byte [].
这是压缩代码:
public void SendWithCompression(string Message)
{
try
{
// Compress the message data in memory.
byte[] UncompressedData = Encoding.UTF8.GetBytes(Message);
byte[] CompressedData = null;
MemoryStream s = new MemoryStream();
using (GZipStream z = new GZipStream(s, CompressionMode.Compress))
{
z.Write(UncompressedData, 0, UncompressedData.Length);
}
CompressedData = s.ToArray();
if (_Transaction != null)
{
_Transaction.Begin();
base.Send(CompressedData, _Transaction);
_Transaction.Commit();
}
else
{
base.Send(CompressedData);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是测试消息的消息内容.它最终成为包装编码二进制数据的XML文档:
<?xml version="1.0"?>..<base64Binary>H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Ih63edMefTsvy2rv8V3+4/8ByygBlxMAAAA=</base64Binary>
以下是它使用的解压缩代码:
String Data;
//Get message and format …Run Code Online (Sandbox Code Playgroud)