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

На моем рабочем месте у нас есть страница 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 Ответ

7 голосов
/ 06 февраля 2010

Есть ли способ определить настройку 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

...