Настройка тайм-аута выполнения httpRuntime для больших загрузок

У меня на работе есть страница 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), но у нас нет свободы делать этот выбор. Все, что мы можем сделать, это изменить код сайта.

Кроме того, я думаю, что эти загрузки должны быть сжаты перед отправкой, но это другой вопрос.

* Вне темы: Является ли "медленная труба" раздражающе смешанной метафорой? Я, вероятно, должен сказать "маленькая труба" вместо этого, но это звучит странно для меня в этом контексте. Мнения?

1 ответ

Решение

Есть ли способ определить настройку executeTimeout только для этой конкретной страницы (или даже сделать ее неограниченной для этой страницы конкретно)? Какой рекомендуемый подход?


Да, вы можете создать подкаталог, который имеет собственный 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

Другие вопросы по тегам