C# 正在下载图像-分块编码-服务器未发送零长度分块

C# 正在下载图像-分块编码-服务器未发送零长度分块,c#,asp.net,.net,httpwebrequest,C#,Asp.net,.net,Httpwebrequest,我正在下载一个Tiff文件,并使用下面的代码将其保存到本地临时目录。使用分块编码发送文件。文件已下载并写入,但我的应用程序一直运行,直到引发异常:无法从传输连接读取数据:连接已关闭。 使用Fiddler,我发现服务器没有发送长度为零的数据块,而是关闭了连接。如何检测何时到达文件结尾并结束程序 CookieContainer cookieJar = new CookieContainer(); HttpWebRequest request = (HttpWebRe

我正在下载一个Tiff文件,并使用下面的代码将其保存到本地临时目录。使用分块编码发送文件。文件已下载并写入,但我的应用程序一直运行,直到引发异常:
无法从传输连接读取数据:连接已关闭。

使用Fiddler,我发现服务器没有发送长度为零的数据块,而是关闭了连接。如何检测何时到达文件结尾并结束程序

        CookieContainer cookieJar = new CookieContainer();

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fileUrl.AbsoluteUri);
        request.Credentials = CredentialCache.DefaultCredentials;
        request.PreAuthenticate = true;
        request.CookieContainer = cookieJar;

        request.AllowWriteStreamBuffering = true;
        request.Timeout = 10000;


        using (HttpWebResponse httpResponse = (HttpWebResponse)request.GetResponse())
        {
            byte[] buffer = new byte[32768];

            using (Stream input = httpResponse.GetResponseStream())
            {
                using (FileStream fs = new FileStream(tempPath + "test_name.tif", FileMode.Create, FileAccess.Write))
                {
                    int bytesRead;

                    while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        fs.Write(buffer, 0, bytesRead);                           
                    }
                }
            }           
        }

上面的代码似乎可以很好地处理我测试的几个图像。您确定不是后来的某个代码导致了错误吗?代码到此结束。在我的例子中,我还成功地下载了该文件。但是程序只是在while循环中运行,直到抛出异常为止。我的几个测试都成功退出了循环。这会发生在您尝试检索的每个图像上,还是仅从一个站点检索图像?特定站点。我认为服务器没有发送长度为零的数据块来表示传输结束,这是一个问题。通过观察Fiddler,我可以看到响应结束,但是如果没有最后一块,代码永远不会知道它。记录循环中发生的事情可能很有用。您还可以添加一些代码来检查循环中的httpResponse状态,并在必要时使用该状态退出。