2011-09-27 29 views
2

我有以下方法签名。我无法改变它(即我不能改变返回类型)。如何使用WCF流式传输XElement/XDocument?

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

    // how do I stream the XElement? 
} 

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

回答

5

这是相当简单的,如果你不介意实际上在第一线获取的所有数据:

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

换句话说,只是把它写出来的内存中,并在返回流内存中的表示。请注意0​​呼叫,这是必要的,否则流将位于数据的处。

我会希望 WCF将只是做正确的事与流。

+0

任何想法,为什么我得到这个:HTTP/1.1 504. ReadResponse()失败:服务器没有返回此请求的响应? – Martin

+0

没关系。我发现了这个问题。我在做“使用(MemoryStream ms ...)”。任何想法为什么使用造成的?我的回报声明在使用中。 – Martin

+0

因为它会返回流并在此之后立即处理它(在WCF可以开始将流发送回客户端之前)。 – carlosfigueira