大きなオブジェクト(> 30MB)をMSMQキューに送信しようとしています。大量のデータがあるため、送信する前にオブジェクトをGZipで圧縮し、受信側で解凍するというアイデアを送信しようとしています。
ただし、圧縮されたストリームをmessage.BodyStream
プロパティに書き込むことは機能しているように見えますが、そこから読み取ることはできません。何が悪いのかわかりません。
Message l_QueueMessage = new Message();
l_QueueMessage.Priority = priority;
using (MessageQueue l_Queue = CreateQueue())
{
GZipStream stream = new GZipStream(l_QueueMessage.BodyStream, CompressionMode.Compress);
Formatter.Serialize(stream, message);
l_Queue.Send(l_QueueMessage);
}
Formatterは、BinaryFormatterタイプのグローバルプロパティです。これは、送信/受信するオブジェクトのタイプ(「ProductItem」など)にシリアル化/逆シリアル化するために使用されます。
受信側は次のようになります。
GZipStream stream = new GZipStream(l_Message.BodyStream, CompressionMode.Decompress);
object decompressedObject = Formatter.Deserialize(stream);
ProductItem l_Item = decompressedObject as ProductItem;
m_ProductReceived(sender, new MessageReceivedEventArgs<ProductItem>(l_Item));
l_ProductQueue.BeginReceive();
EndOfStreamException "{"Unable to read beyond the end of the stream."}
System.IO.BinaryReader.ReadByte()で逆シリアル化しようとしています
messageBodyStreamプロパティを使用して、実際にはmessage.Formatterを回避します。これは、GZipStreamで独自のser / deserメカニズムを使用しているため、何にも初期化されません。ただし、それが正しい方法かどうかはわかりません。
私は何が欠けていますか?ありがとう!