Как настроить IIS для обработки действительно больших файлов? - PullRequest
9 голосов
/ 15 октября 2008

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

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

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

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

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

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

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

В machine.config: Внутри 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 МБ, так как это не самый большой файл, который клиент должен будет загрузить.

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

Ответы [ 6 ]

5 голосов
/ 16 октября 2008

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

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

3 голосов
/ 20 декабря 2011

(примечание для Google):

Для 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>
2 голосов
/ 15 октября 2008

Когда мы столкнулись с этой проблемой, нам пришлось увеличить ограничение размера буфера в соответствии с этой статьей базы знаний: 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

1 голос
/ 16 октября 2008

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

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

0 голосов
/ 28 июля 2009

Вы говорите:

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

0 голосов
/ 27 ноября 2008

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

...