Подтвердить что ты не робот

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

4b9b3361

Ответ 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

  • Выберите веб-сайт, на котором вы хотите включить большие загрузки файлов.

  • В главном окне дважды нажмите "Запросить фильтрацию"

  • После открытия окна вы можете увидеть список вкладок, например: расширения имен файлов, правила, скрытые сегменты и т.д.

    Независимо от выбранной вкладки в главном окне щелкните правой кнопкой мыши, чтобы отобразить контекстное меню всплывающих окон. Выберите "Редактировать настройки функций" в меню.

  • В появившейся форме измените "Максимально допустимая длина контента (байты)"