Поделиться через


Превышено ограничение буфера HTTP 500 или ответа при использовании Response.BinaryWrite в IIS

Эта статья поможет устранить ошибку (превышено ограничение буфера http 500 или ответа), возникающее при использовании Response.BinaryWrite метода в Active Server Pages (ASP) для отправки файла.

Исходная версия продукта: службы IIS, Активные серверные страницы (ASP)
Исходный номер базы знаний: 944886

Симптомы

Рассмотрим следующий сценарий:

  • Файл отправляется на клиентский компьютер с веб-сервера, на котором установлен службы IIS (IIS).
  • Метод используется Response.BinaryWrite для отправки файла на клиентский компьютер, а AspBufferingOn свойство имеет значение False.

В этом сценарии на клиентском компьютере может появиться одно из следующих сообщений об ошибках:

  • Сообщение об ошибке 1

    HTTP 500 — внутренняя ошибка сервера

  • Сообщение об ошибке 2

    Ошибка объекта ответа "ASP 0251 : 80004005"
    Превышено ограничение буфера ответа
    Выполнение страницы ASP привело к превышению заданного предела буфера ответа.

Кроме того, может появиться сообщение, похожее на следующее в файле журнала IIS:

ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded

Причина

Эта проблема возникает из-за того, что IIS применяет значение буфера ответа ASP по умолчанию размером 4 МБ при отключении буферизации ответов ASP.

В большинстве случаев ограничение буфера в 4 МБ достаточно для ответов ASP, отправляемых веб-клиентам. Если это ограничение недостаточно, используйте один из следующих методов.

Решение 1. Уменьшение размера ответа

Чтобы устранить эту проблему при использовании Response.BinaryWrite метода и буферизации ASP, убедитесь, что данные, возвращаемые клиенту, не превышают 4 МБ.

Если ответ больше значения по умолчанию в 4 МБ, этот размер часто вызывает плохое взаимодействие с пользователем. Веб-браузер должен получать большой ответ по сети. Затем веб-браузер должен проанализировать и отобразить большой HTML-ответ.

Решение 2. Включение буферизации ответов ASP и увеличение предела буфера

Свойство метабазы IIS можно использовать AspBufferingOn для включения или отключения буферизации на уровне приложения.

Примечание.

В СЛУЖБАх IIS можно включить или отключить буферизацию ответов ASP на уровне приложения с помощью bufferingOn значения в разделе <System.webserver> ASP в ApplicationHost.config файле или в Web.config файле.

Чтобы включить или отключить буферизацию на уровне страницы, можно использовать Response.Buffer свойство.

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

Чтобы увеличить ограничение буферизации в IIS, выполните следующие действия.

  1. Нажмите кнопку "Пуск", выберите "Запустить", введите cmd и нажмите кнопку "ОК".

  2. cd /d %systemdrive%\inetpub\adminscripts Введите команду и нажмите клавишу ВВОД.

  3. cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize Введите команду и нажмите клавишу ВВОД.

    Примечание.

    LimitSize представляет размер ограничения буферизации в байтах. Например, число 67108864 задает размер буферизации размером 64 МБ.

Чтобы убедиться, что ограничение буфера задано правильно, выполните следующие действия.

  1. Нажмите кнопку "Пуск", выберите "Запустить", введите cmd и нажмите кнопку "ОК".
  2. cd /d %systemdrive%\inetpub\adminscripts Введите команду и нажмите клавишу ВВОД.
  3. cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit Введите команду и нажмите клавишу ВВОД.

Дополнительная информация

При использовании Response.BinaryWrite метода и буферизации ответов ASP можно отправлять клиенту только 4 МБ данных, если только свойство ограничения буферизации для страницы не задано явным образом. По умолчанию значение свойства bufferLimit в IIS составляет 4 194 304 байта.

Кроме того, API завершается ошибкой, если ответ клиента больше значения ограничения буфера, BinaryWrite() даже если буферизация ответа ASP отключена.

Примечание.

Рекомендуется включить буферизацию ответов ASP. Буферизация ответов ASP повышает производительность веб-приложения.