如何使用WCF流式传输XElement/XDocument?

Mar*_*tin 2 .net c# wcf

我有以下方法签名.我无法改变它(即我不能改变返回类型).

public Stream GetMusicInfo(string songId)
{
    XElement data = dao.GetMusicInfo(songId);

    // how do I stream the XElement?
}
Run Code Online (Sandbox Code Playgroud)

如何使用WCF流式传输XElement/XDocument?

Jon*_*eet 5

这很简单,如果你不介意实际获取第一行中的所有数据:

public Stream GetMusicInfo(string songId)
{
    XElement data = dao.GetMusicInfo(songId);
    MemoryStream ms = new MemoryStream();
    data.Save(ms);
    ms.Position = 0;
    return ms;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,只需将其写入内存中,然后通过内存中的表示形式返回一个流.请注意该Position = 0;调用,否则该流将定位在数据的末尾.

希望 WCF能够在流中做正确的事情.