Я пытаюсь отправить большие объекты (> 30 МБ) в очередь 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);
}
Форматтер - это глобальное свойство типа 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, я фактически обхожу сообщение. Форматирующий объект, который я ни к чему не инициализирую, потому что я использую свой собственный сервис/ Дезертирующий механизм с GZipStream.Однако я не уверен, что это правильный способ сделать это.
Чего мне не хватает?Спасибо!