Отправка содержимого файла DeflateStream в очередь сообщений Azure - PullRequest
1 голос
/ 22 апреля 2019

Речь идет об отправке / получении содержимого файла XML в / из очереди сообщений службы Azure с использованием TopicClient в C #.

Я отправляю содержимое файла XML в виде строки.может видеть сообщение в очереди Azure и даже может правильно прочитать его содержимое, поэтому все работает нормально, когда я отправляю простой текстовый XML-файл.

Но из-за ограничений данных входящего сообщения в очереди япришлось сжать файл перед отправкой, я использую C # DeflateStream , чтобы сжать содержимое файла и записать его обратно в файл.На приемном конце я могу прочитать содержимое файла, но оно не совпадает с тем, что было отправлено.

Я подозреваю, что это как-то связано с кодировкой.Не могли бы вы указать мне, что мне не хватает?Заранее спасибо.

Отправитель

public string Compress(FileInfo XMLFile) {

 using(FileStream originalFileStream = file.OpenRead()) {
  if ((File.GetAttributes(file.FullName) & FileAttributes.Hidden) !=
   FileAttributes.Hidden & file.Extension != ".cmp") {
   using(FileStream compressedFileStream = File.Create(file.FullName + ".cmp")) {
    using(DeflateStream compressionStream = new DeflateStream(compressedFileStream, CompressionMode.Compress)) {
     originalFileStream.CopyTo(compressionStream);
    }
   }

   FileInfo info = new FileInfo(directoryPath + "\\" + file.Name + ".cmp");
   Console.WriteLine("Compressed {0} from {1} to {2} bytes.", file.Name, file.Length, info.Length);
  }
 }

 return info.FullName;
}

// snippet from the send method
FileInfo XMLfile = new FileInfo(XMLFilePath);
string CompressedXMLFilePath = Compress(XMLfile);
TopicClient myTopicClient = TopicClient.CreateFromConnectionString(AzureConnectionString);
string toSend = File.ReadAllText(CompressedXMLFilePath); // read contents of file compressed with DeflateStream.
myTopicClient.Send(new BrokeredMessage(toSend));

Получатель

var subClient = SubscriptionClient.CreateFromConnectionString(_serviceBusConn, _serviceBustopic, "<subscription name>");  
subClient.OnMessage(m =>  
{  
    Console.WriteLine(m.GetBody<string>());  
});
...