Как включить загрузку больших файлов в классическом 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

Гуглить, что указывает на увеличение maxAllowedContentLength, как я сделал выше. Так что у меня нет свежих идей, но я уверен, что умная толпа stackoverflow может решить эту проблему за меньшее время, чем мне потребовалось, чтобы написать этот вопрос.

5 27

5 ответов:

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

В Windows 2008-перейдите в Администрирование - диспетчер серверов-разверните роли-разверните веб-сервер-нажмите на IIS-и найдите веб-экземпляр, для которого вы хотите изменить ограничение размера файла, а затем перейдите в опцию "ASP" разверните "свойства ограничения", а свойство, которое вам нужно изменить, - это "максимальный предел тела Сущности запроса". Размер файла всегда в байтах, поэтому используйте любой онлайн калькулятор для расчета преобразования байтов в КБ или МБ.

Во-первых @AnthonyWJones Ответ был очень полезен, но не решил мою проблему, на самом деле это немного неточно, и по этой причине я пишу это.

Большие загрузки в IIS 6 были пустяком, у вас было одно значение конфигурации, чтобы беспокоиться о

AspMaxRequestEntityAllowed

тот самый AspMaxRequestEntityAllowed свойство задает максимальное число байтов, разрешенных в теле сущности объекта. Запрос ASP. Если заголовок Content-Length присутствует и задает объем данных, превышающий значение AspMaxRequestEntityAllowed, IIS возвращает ответ об ошибке 403. Это свойство связано в функции с MaxRequestEntityAllowed, но это специфический для ASP запрос. В то время как вы можете установить свойство MaxRequestEntityAllowed равным 1 Мб на уровне общей службы веб-публикаций (WWW Service), вы можете установить AspMaxRequestEntityAllowed к меньшему значению, если вы знаете, что ваши конкретные приложения ASP обрабатывают меньший объем данных.


С появлением IIS 7 и новой иерархической системы конфигурации на основе XML, которая использует *.конфигурационные файлы все это стало немного сложнее.

Теперь есть два параметра, которые необходимо правильно настроить, прежде чем загрузка больших файлов будет работать, как вы ожидаете, и они оба живут в разных областях конфигурация.

MaxRequestEntityAllowed

 <configuration>
   <system.webServer>
     <asp>
       <limits maxRequestEntityAllowed="200000" />
     </asp>
   <system.webServer>
 <configuration>

тот самый maxRequestEntityAllowed атрибут задает максимальное число байтов, разрешенных в теле сущности запроса ASP. Если заголовок Content-Length присутствует и задает объем данных, превышающий значение maxRequestEntityAllowed, IIS возвращает ответ об ошибке HTTP 403.

Важно: Настройка вышеуказанного параметра будет работать до определенного момента, как вы увидите из приведенного ниже значения по умолчанию, но как только вы достигнете этого значения, независимо от того, что maxRequestEntityAllowed установлено, сервер ответит HTTP 404 Not Found error response. Сначала это смутило меня, потому что я подумал, что это, должно быть, мой код, который возвращал ответ на ошибку 404.

MaxAllowedContentLength

 <configuration>
   <system.webServer>
     <security>
       <requestFiltering>
         <requestLimits maxAllowedContentLength="30000000" />
       </requestFiltering>
     </security>
   </system.webServer>
 </configuration>

задает максимальное значение длина содержимого в запросе, в байтах. Значение по умолчанию-30000000, что составляет приблизительно 28,6 МБ.

Этот параметр чрезвычайно важен, поскольку он определяет максимальное число байтов в запросе IIS (а не ASP-запросе, как Предыдущее значение конфигурации) он не имеет ничего общего с длиной содержимого ответа (Как уже было сказано ранее) . Независимо от того, какая maxRequestEntityAllowed (которая являетсяasp-классической конкретной установкой) установлена to, если maxAllowedContentLength не установлен или вы пытаетесь загрузить больше, чем по умолчанию 28 МБ (ок.) вы получите ответ на ошибку HTTP 404.

Ссылки

Для тех, кто не может выполнить команду appcmd из CMD, необходимо изменить путь до C:\windows\system32\inetsrv так как команда находится в этой папке.

Принятое здесь решение не сработало для меня. Во-первых, не было элемента, указанного в моей конфигурации, и я не хотел испортить файл конфигурации.

Я тоже пробовал @Шоаиб-Сулеман Решение и она не работает. Наконец, я наткнулся на решение, показанное здесь, и оно сработало.

  1. Откройте IIS 7 SnapIn

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

  3. В главном окне дважды щелкните мышью 'Фильтрация запросов'

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

    Независимо от выбранной вкладки,в главном окне щелкните правой кнопкой мыши для отображения всплывающего контекстного меню. В меню выберите пункт "Изменить настройки объекта".

  5. В появившейся форме измените "максимально допустимую длину содержимого (байт)"