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

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

Исходная версия продукта: Службы IIS 7 и более поздних версий
Исходный номер базы знаний: 944886

Симптомы

При отправке файла на клиентский компьютер с веб-сервера, на котором установлены службы IIS 7 или более поздней версии, на клиентском компьютере может появиться сообщение об ошибке, похожее на следующее:

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

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

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

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

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

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

    ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded

Эта проблема возникает при использовании Response.BinaryWrite метода для отправки файла на клиентский компьютер, а свойству AspBufferingOn присвоено значение False.

Причина

Эта проблема возникает из-за того, что службы IIS применяют значение буфера ответов active Server Pages (ASP) по умолчанию, равное 4 МБ, если буферизация ответов ASP отключена.

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

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

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

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

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

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

Примечание.

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

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

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

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

  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 7 или более поздней версии составляет 4 194 304 байта.

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

Примечание.

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