Как включить загрузку больших файлов в классическом ASP на IIS 7?
Недавно мне пришлось получить старое приложение ASP, работающее в IIS 7.5 на сервере W2K8. Почти все работает нормально, за исключением того, что я не могу заставить его принимать заказы размером более ~ 200 КБ. Я нашел настройку, что из того, что я могу понять, должен сделать трюк, в applicationHost.config, я установил максимальный размер запроса до 100 МБ следующим образом:
<location path="TheNameOfMySite">
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
</location>
К сожалению, это вообще ничего не делает, оно по-прежнему отказывается принимать файлы размером более 200 КБ, а в файле журнала это сообщение об ошибке:
ASP_0104_:_80004005|Operation_not_Allowed
Googling, указывающий на увеличение maxAllowedContentLength
, как я сделал выше. Итак, я свеж от идей, но уверен, что умная толпа stackoverflow может решить это за меньшее время, чем потребовалось, чтобы я написал этот вопрос.
Ответы
Ответ 1
maxAllowedContentLength
определяет, сколько данных может быть отправлено в ответ. Однако вы хотите контролировать, сколько можно принять в запросе. Это связано с атрибутом maxRequestEntityAllowed
элемента limits
в разделе asp
конфигурационного файла. Пример может выглядеть так: -
<system.webServer>
<asp>
<cache diskTemplateCacheDirectory="%SystemDrive%\inetpub\temp\ASP Compiled Templates" />
<limits scriptTimeout="00:02:00"
queueConnectionTestTime="00:00:05"
requestQueueMax="1000"
maxRequestEntityAllowed="104857600"
/>
</asp>
Вы можете настроить это в менеджере IIS7 в разделе "Свойства ограничения" в сетке свойств для функции ASP. В качестве альтернативы вы можете использовать командную строку: -
appcmd set config /section:asp /limits.maxRequestEntityAllowed:104857600
Обратите внимание, что расширение этого значения увеличивает окно для атаки DOS, когда злоумышленник отправляет на сервер большой контент, поэтому у вас не возникнет соблазна расширить его за пределы того, что вам действительно нужно.
Ответ 2
В Windows 2008 - перейдите в "Администрирование" - "Диспетчер серверов" - "Роли" - разверните веб-сервер -click в IIS и найдите веб-экземпляр, для которого вы хотите изменить ограничение размера файла, а затем перейдите в опцию "ASP" expand "Limit properties" и свойство, которое необходимо изменить, - это Maximum Limit Body Limit. Размер файла всегда в байтах, поэтому используйте любой онлайн-калькулятор для вычисления преобразования байтов в КБ или МБ.
Ответ 3
Сначала @AnthonyWJones ответ был очень полезен, но не решил мою проблему, на самом деле это немного неточно и по этой причине я пишу это.
Большие загрузки в IIS 6 были неудачными, у вас было одно значение конфигурации, чтобы беспокоиться о
AspMaxRequestEntityAllowed
Свойство AspMaxRequestEntityAllowed указывает максимальное количество байтов, разрешенных в теле объекта ASP-запроса. Если присутствует заголовок Content-Length и задает объем данных, превышающий значение AspMaxRequestEntityAllowed, IIS возвращает ответ ошибки 403. Это свойство связано с функцией MaxRequestEntityAllowed, но специфично для ASP-запроса. Если вы можете установить для свойства MaxRequestEntityAllowed значение 1 МБ на общедоступном сервисе World Wide Web Publishing Service (WWW Service), вы можете выбрать значение AspMaxRequestEntityAllowed для более низкого значения, если вы знаете, что ваши конкретные приложения ASP обрабатывают меньший объем данных.
С введением IIS 7 и новой иерархической системы конфигурации на основе XML, которая использует файлы *.config, все стало немного сложнее.
Теперь есть две настройки, которые необходимо настроить правильно, прежде чем загрузка больших файлов будет работать так, как вы ожидаете, и оба они живут в разных областях конфигурации.
maxRequestEntityAllowed
<configuration>
<system.webServer>
<asp>
<limits maxRequestEntityAllowed="200000" />
</asp>
<system.webServer>
<configuration>
Атрибут maxRequestEntityAllowed указывает максимальное количество байтов, разрешенных в теле объекта запроса ASP. Если присутствует заголовок Content-Length и задает объем данных, превышающий значение maxRequestEntityAllowed, IIS возвращает ответ об ошибке HTTP 403.
ВАЖНО:
Настройка вышеуказанного параметра будет работать так, как вы увидите по умолчанию, но как только вы достигнете этого значения по умолчанию, независимо от того, для чего установлен maxRequestEntityAllowed
, сервер будет отвечать HTTP-сообщением об ошибке HTTP 404 Not Found. Сначала это смутило меня, потому что я думал, что это должен быть мой код, который возвращал ответ об ошибке 404.
maxAllowedContentLength
<configuration>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="30000000" />
</requestFiltering>
</security>
</system.webServer>
</configuration>
Определяет максимальную длину содержимого в запросе в байтах. Значение по умолчанию - 30000000, что составляет примерно 28,6 МБ.
Этот параметр чрезвычайно важен, поскольку он определяет максимальное количество байтов в запросе IIS (а не ASP-запрос, как предыдущее значение конфигурации) он не имеет ничего общего с длиной содержимого ответа (как ранее было сказано). Независимо от того, что maxRequestEntityAllowed
(которое является asp-classic конкретная настройка), если maxAllowedContentLength
не установлен или вы пытаетесь загрузить больше, чем значение по умолчанию 28 МБ (приблизительное), вы получите сообщение об ошибке HTTP 404.
Ссылки
Ответ 4
для тех, кто не может выполнить команду appcmd из CMD, вам нужно изменить путь к C:\windows\system32\inetsrv, поскольку команда находится в этой папке.
Ответ 5
Решение, принятое здесь, не сработало для меня. Во-первых, не было элемента, указанного в моей конфигурации, и я не хотел испортить конфигурационный файл.
Я также пробовал @shoaib-suleman , и он тоже не работал. Наконец, я столкнулся с представленным здесь решением, и оно сработало.
-
Откройте IIS 7 SnapIn
-
Выберите веб-сайт, на котором вы хотите включить большие загрузки файлов.
-
В главном окне дважды нажмите "Запросить фильтрацию"
-
После открытия окна вы можете увидеть список вкладок, например: расширения имен файлов, правила, скрытые сегменты и т.д.
Независимо от выбранной вкладки в главном окне щелкните правой кнопкой мыши, чтобы отобразить контекстное меню всплывающих окон.
Выберите "Редактировать настройки функций" в меню.
-
В появившейся форме измените "Максимально допустимая длина контента (байты)"