将GetResponseStream输出返回给另一个函数,如何处理respone

时间:2012-11-27 00:35:51

标签: c# getresponsestream

我正在开发下载管理器项目 我正在使用:

public Stream GetStream(string url)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    return response.GetResponseStream();
}

然后将返回的流用作输入流,将FileStream用作while语句中的输出流:

Stream InputStream = GetStream("http://test_url/test.zip");
Stream OutputStream = new FileStream("d:\\test.zip", FileMode.Create, FileAccess.Write));
do
{
    readSize = InputStream.Read(buffer, 0, buffSize);
    OutputStream.Write(buffer, 0, (int)readSize);
}
while (readSize > 0);

使用256kpps连接下载超过50MB的文件时 在大约20 - 30 MB之后,readSize变为0而没有错误

我的问题是: 是否有任何错误的Response对象,它被处置???? 或者问题是什么?

提前谢谢你, 如果我不能更好地解释,我很抱歉。

1 个答案:

答案 0 :(得分:2)

您没有处置可能导致问题的HttpWebRequest / HttpWebResponse对象 - 对同一服务器的并发连接数存在内置限制。

你应该做的事情如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using(HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using(Stream responseStream = response.GetResponseStream())
    {
        using(Stream outputStream = new FileStream(...))
        {
            responseStream.CopyTo(outputStream);
        }
    }
}

Stream.CopyTo是.NET 4.0中的新功能。如果您使用.NET< = 3.x,则需要write your own