在我的工作地点,我们有一个 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),但我们没有做出这种选择的自由。我们所能做的就是修改网站的代码。
另外,我确实认为这些下载内容应该在发送之前进行压缩,但那是另一回事。
*题外话:“慢管”是一个令人讨厌的混合比喻吗?我可能应该说“小管道”,但在这种情况下,这对我来说听起来很奇怪。意见?