为大型下载配置httpRuntime执行超时

时间:2010-02-05 21:16:37

标签: c# asp.net httpruntime executiontimeout

在我的工作地点,我们有一个ASP.NET页面,它使用以下代码执行文件下载。我们使用它而不是Request.TransmitFile(),因为该文件直接来自zip存档。

    private void DownloadStream(Stream stream)
    {
        int bytesRead;
        int chunkSize = 1048576; //1MB
        byte[] readBuffer = new byte[chunkSize];

        while ( (bytesRead = stream.Read(readBuffer, 0, readBuffer.Length)) > 0)
        {
            if (!Response.IsClientConnected)
                break;

            Response.OutputStream.Write(readBuffer, 0, bytesRead);
            Response.Flush();
        }
    }

我正在尝试确定httpRuntime executionTimeout设置的合理值。发送的文件大小最大为1GB,我们的一些用户对网络服务器的管道 * 非常慢(想想64K行)。我们不希望这些用户体验连接重置。但是,我们希望为站点的其余部分保留合理的超时值。

有没有办法为这个特定的页面定义一个只有的executionTimeout设置(或者甚至专门为该页面设置它)?推荐的方法是什么?我知道我们可能最好使用完全不同的方法来提供文件(例如FTP),但我们没有自由做出这种选择。我们所能做的就是修改网站的代码。

此外,我认为这些下载应该在发送前进行压缩,但这是另一回事。

*题外话题:“慢管”是一个令人烦恼的混合比喻吗?我应该说“小管”,但在这种情况下,这听起来很奇怪。意见?

1 个答案:

答案 0 :(得分:7)

  

有没有办法只为这个特定页面定义一个executionTimeout设置(或者甚至专门为该页面设置它)?推荐的方法是什么?


  

是的,您可以创建一个具有自己的web.config的子目录并放入   某个页面需要在子目录中进行特殊设置。在   另外,web.config文件的模式也提供了元素   这有助于指定某个路径(甚至某个页面)的设置。   例如,如果您想要覆盖just的设置   一页(upload.aspx),你可以在中应用元素   web.config文件如下:               

http://www.velocityreviews.com/forums/t75299-executiontimeout.html

此处有更多信息:http://forums.asp.net/t/1235207.aspx
在这里:http://codebetter.com/blogs/peter.van.ooijen/archive/2006/06/15/146446.aspx