На моем рабочем месте у нас есть страница 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 executeTimeout. Размер отправляемых файлов - до 1 ГБ, а некоторые из наших пользователей очень медленно передают * на веб-сервер (например, 64 КБ). Мы не хотим, чтобы у этих пользователей произошел сброс соединения. Тем не менее, мы хотим сохранить разумное значение времени ожидания для остальной части сайта.
Есть ли способ определить настройку executeTimeout только для этой конкретной страницы (или даже сделать ее неограниченной для этой страницы конкретно)? Какой рекомендуемый подход? Я знаю, что нам, вероятно, было бы лучше использовать совершенно другой метод обслуживания файлов (например, FTP), но у нас нет свободы делать такой выбор. Все, что мы можем сделать, это изменить код сайта.
Кроме того, я делаю думаю, что эти загрузки должны быть сжаты перед отправкой, но это другое дело.
* Не по теме: Является ли «медленная труба» раздражающе смешанной метафорой? Возможно, я должен сказать «маленькая труба» вместо этого, но это звучит странно для меня в этом контексте. Мнения?