繁体   English   中英

如何使用内存较少的流获取 wcf 消息正文?

[英]How to get wcf message body using stream with less memory?

我有一个这样的 xml 文件:

<bookstore>
<book genre='novel' ISBN='10-861003-324'><title>The Handmaid's Tale</title><price>19.95</price></book>
<book genre='novel' ISBN='1-861001-57-5'><title>Pride And Prejudice</title><price>24.95</price></book>
</bookstore>

我使用这个 xml 文件来创建一条消息。 然后,我想使用流来获取消息体,所以我使用了这样的代码:

XmlReader xmlReader = XmlReader.Create("D:\\TestForCSharp\\ConsoleApp1\\ConsoleApp1\\2books.xml");

Message message = Message.CreateMessage(MessageVersion.None, null, xmlReader);
MemoryStream output = new MemoryStream();

MemoryStream ms = new MemoryStream();
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(ms, Encoding.UTF8);
message.WriteBodyContents(writer);
writer.Flush();
ms.Seek(0, SeekOrigin.Begin);

这已经比 ReadOuterXml 使用更少的内存,但由于message.WriteBodyContents(writer)而增加了内存使用。


XmlReader xmlReader = XmlReader.Create("D:\\TestForCSharp\\ConsoleApp1\\ConsoleApp1\\2books.xml");

Message message = Message.CreateMessage(MessageVersion.None, null, xmlReader);

XmlReader reader = message.GetReaderAtBodyContents();
string res = reader.ReadOuterXml();
Stream ms = GenerateStreamFromString(res);
public static Stream GenerateStreamFromString(string s)
{
    var stream = new MemoryStream();
    var writer = new StreamWriter(stream);
    writer.Write(s);
    writer.Flush();
    stream.Position = 0;
    return stream;
}

有更好的内存解决方案吗?

是否可以在没有任何内存成本的情况下使用流获取消息正文?

也许 XmlTextReader 可以帮助您。 XmlTextReader 是用于从文本文件中读取 XML 的特定派生类。

本案例中的另一个答案可能会对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM