3

在我的工作地点,我们有一个 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),但我们没有做出这种选择的自由。我们所能做的就是修改网站的代码。

另外,我确实认为这些下载内容应该在发送之前进行压缩,但那是另一回事。

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

4

1 回答 1

7

有没有办法只为这个特定页面定义一个 executionTimeout 设置(或者甚至专门针对那个页面使其不受限制)?推荐的方法是什么?


是的,您可以创建一个具有自己的 web.config 的子目录,并将需要特定设置的特定页面放在子目录中。此外,web.config 文件的架构还提供了可以帮助指定某个路径(甚至某个页面)的设置的元素。例如,如果您只想覆盖一页(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

于 2010-02-05T21:28:27.963 回答