这是关于使用C#中的TopicClient向 Azure 服务消息队列发送/接收 XML 文件的内容。
我将 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>());
});