Как настроить IIS для обработки действительно больших загрузок файлов?

StackOverflow https://stackoverflow.com/questions/206132

  •  03-07-2019
  •  | 
  •  

Вопрос

Платформа:IIS 6, ASP.Net 2.0 (.Net 3.5), Сервер 2003.

Я создаю приложение, которое принимает файлы от пользователя, обрабатывает их и возвращает результат.Файл загружается с помощью HTTP POST в веб-форму ASP.Net.Приложение ожидает несколько больших файлов (сотни МБ).

Я использую SWFUpload для выполнения загрузки с красивым индикатором выполнения, но это не усугубляет проблему, потому что, когда я обхожу ее, используя стандартную HTML-форму, указывающую на мою страницу приемника загрузки, я получаю точно такую ​​же ошибку.При использовании индикатора выполнения загрузка продолжается до 100 %, а затем завершается сбоем.В стандартной форме поведение выглядит таким же.

У меня сейчас проблема с загрузкой файла размером около 150 МБ.Я изменил все настройки, которые смог найти, но все равно безуспешно.

Вот краткое изложение того, что я изменил на данный момент:

В Web.config:Добавлено это внутри system.web:

<httpRuntime executionTimeout="3600" maxRequestLength="1536000"/>

В машине.конфигурации:Внутри system.web изменено:

<processModel autoConfig="true" />

к:

<processModel autoConfig="true" responseDeadlockInterval="00:30:00" responseRestartDeadlockInterval="00:30:00" />

и в MetaBase.xml:Измененный:

AspMaxRequestEntityAllowed="204800"

к:

AspMaxRequestEntityAllowed="200000000"

Когда загрузка не удалась, я получаю ошибку 404 от IIS.Моя веб-форма не начинает обработку или, по крайней мере, не доходит до события Page_Load.Я создал исключение в начале этого обработчика, и оно вообще не выполняется для больших файлов.

Все работает нормально с файлами меньшего размера (я тестировал до 5,5 МБ).Я не совсем уверен, какой размер файла является предельным, но я знаю, что мой предел должен быть выше 150 МБ, поскольку это не самый большой файл, который клиент должен будет загрузить.

Кто-нибудь может помочь?

Это было полезно?

Решение

Urlscan был активен на всех веб-сайтах и ​​имеет собственное ограничение длины объекта запроса.Я не знал, что Urlscan работает на нашем сервере, поскольку это был глобальный фильтр ISAPI, который не работал на моем отдельном веб-сайте.

Примечание:Чтобы найти глобальные фильтры ISAPI, щелкните правой кнопкой мыши папку «Веб-сайты» в администраторе IIS и выберите «Свойства», затем перейдите на вкладку «Фильтры ISAPI».

Другие советы

(Примечание для гуглеров):

Для IIS7 добавьте ниже в web.config (я добавил выше <system.serviceModel>):

<system.webServer>
        <security>
            <requestFiltering><requestLimits maxAllowedContentLength="262144000" /></requestFiltering> <!-- maxAllowedContentLength is in bytes. Defaults to 30,000,000 -->
        </security>
</system.webServer>

Когда мы столкнулись с этой проблемой, нам пришлось увеличить предел размера буфера в соответствии с этой статьей базы знаний:http://support.microsoft.com/kb/944886/en-us

Я знаю, что здесь упоминается ASP, но я считаю, что это сработало и для ASP.NET.

Редактировать:Вот ссылка, которая может быть более актуальной для вашей проблемы и предоставить другие варианты:
http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx

404 и отсутствует Page_Load:IIS может обработать запрос только после того, как полный POST окажется на сервере.Следовательно, если POST завершается неудачно (из-за его размера), он не может запускать события страницы.

Вы можете попробовать NeatUpload http://www.brettle.com/neatupload.Из руководства:«По умолчанию NeatUpload напрямую не ограничивает размер загружаемых файлов».

Вы также можете попробовать Велодок XP издание который имеет несколько преимуществ перед NeatUpload, включая тот факт, что он использует расширения ASP.NET Ajax.Смотрите также веб-сайт Велодок Чтобы получить больше информации.

Ты говоришь:

Но 1536000 — это всего 1,5 МБ?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top