保存webrequest返回的流对象

时间:2012-11-26 14:50:23

标签: c#

我有一个从网站上检索XML文件的代码,所以我这样做:

WebRequest request = WebRequest.Create(url);
request.Method = "GET";
request.ContentType = "text/xml";

using (WebResponse webResponse = request.GetResponse())
{
    using (Stream responseStream = webResponse.GetResponseStream())
    {
       if (responseStream != null)
        {
            reportXML = XDocument.Load(responseStream.ToString());
        }
    }
    using (XmlWriter writer = XmlWriter.Create(@"C:\Retrieved.xml"))
    {
        reportXML.Save(writer);
    }
 }

但我调试了应用程序,似乎我丢失了这行代码的所有内容,所以我没有任何东西可以保存。

Stream responseStream = webResponse.GetResponseStream())

知道为什么会这样吗?

如果我调查对象,我会看到:

  

Length ='responseStream.Length'引发了类型异常   的 'System.NotSupportedException'

错误如下:

  

无法找到文件'C:\ Documents and Settings \ user \ My   Documents \ Visual Studio   2010 \项目\原\ APP \ BIN \调试\ System.Net.ConnectStream”。

1 个答案:

答案 0 :(得分:5)

这是问题所在:

reportXML = XDocument.Load(responseStream.ToString());

在像这样的流上调用ToString()几乎永远不会给你任何有用的东西。如果您只想加载流的内容,请删除ToString来电:

reportXML = XDocument.Load(responseStream);

或者,如果确实只想将其保存到磁盘,只需使用Stream.CopyTo,而不是首先将其解析为XML。