Превышен предел буфера ответа - PullRequest
38 голосов
/ 11 февраля 2011

Я выполняю простой запрос, чтобы вывести данные из моей базы данных и отобразить их.Я получаю сообщение об ошибке Response Buffer Limit Exceeded.

Ошибка: Ошибка объекта ответа 'ASP 0251: 80004005'
Превышен лимит буфера ответа
/abc/test_maintenanceDetail.asp, строка 0
Выполнение страницы ASP вызвалоБуфер ответа превысил установленный лимит.

Я также попытался Response.flush в своем цикле и также использую response.buffer = false в верхней части страницы, но все же я не получаю никаких данных.

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

Ответы [ 11 ]

49 голосов
/ 13 марта 2013

Я знаю, что это слишком поздно, но для тех, кто сталкивается с этой проблемой: если вы используете какой-то цикл (в моем случае, Do-While) для отображения данных, убедитесь, что вы переходите кследующая запись (в моем случае, rs.MoveNext).

43 голосов
/ 24 февраля 2012

Поддержка Microsoft говорит это

http://support.microsoft.com/kb/925764

но в графическом интерфейсе это проще:

  • В диспетчере серверов нажмите ASP.
  • Изменить ограничение буфера от 4 МБ до 64 МБ.
  • Применить и перезапустить.
26 голосов
/ 26 июня 2012

Причина, по которой это происходит, заключается в том, что буферизация включена по умолчанию, а IIS 6 не может обработать большой ответ.

В Classic ASP вверху страницы после <%@Language="VBScript"%> добавьте: <%Response.Buffer = False%>

В ASP.NET вы бы добавили Buffer="False" к вашей директиве Page. Например: <%@Page Language="C#" Buffer="False"%>

8 голосов
/ 02 декабря 2016

Я столкнулся с такой же проблемой, моя версия IIS - 8.5 .Увеличение Response Buffering Limit по ASP -> Limit Properties решило проблему.

  1. В IIS 8.5, выберите ваш проект, вы можете увидеть параметры в правой части.В этом в IIS вы можете увидеть опцию ASP.

ASP option

В окне параметров увеличьте значение Response Buffering Limit до 40194304 (приблизительно 40 МБ).

Increase buffer limit

Отойдя от опции, в правой верхней части вы можете увидеть меню Действия , Выбрать Применить .Это решило мою проблему.

Apply settings

6 голосов
/ 28 декабря 2012

Если вам не разрешено изменять ограничение буфера на уровне сервера, вам нужно будет использовать метод <% Response.Buffer = False%>.

HOWEVER, если вы все еще получаете эту ошибкуи иметь большую таблицу на странице, виновником может быть сам стол.По своему дизайну некоторые версии Internet Explorer буферизируют весь контент до того, как он будет отображен на странице.Таким образом, даже если вы говорите странице не буферизировать содержимое, элемент таблицы может быть буферизован и вызывать эту ошибку.

Некоторые альтернативные решения могут заключаться в разбивке на страницы результатов таблицы, но если вы должны отобразить всю таблицуи он имеет тысячи строк, бросьте эту строку кода в середине цикла генерации таблицы: <% Response.Flush%>.Из соображений скорости вы можете также рассмотреть возможность добавления базового счетчика, чтобы сброс происходил только каждые 25 или 100 строк или около того.

Недостатки отсутствия буферизации выходных данных:

  1. замедление общей загрузки страницы
  2. таблицы и столбцы будут корректировать свою ширину при заполнении содержимого (таблица кажется покачивающейся)
  3. Пользователи смогут нажимать на ссылки и взаимодействовать со страницей до ее полной загрузки.Поэтому, если у вас внизу страницы есть какой-то javascript, вы можете переместить его наверх, чтобы убедиться, что он загружен до того, как некоторые из ваших быстро движущихся пользователей нажмут на что-либо.

См. Этот КБстатья для получения дополнительной информации http://support.microsoft.com/kb/925764

Надеюсь, что помогает.

5 голосов
/ 28 февраля 2016

Спасибо большое! <% Response.Buffer = False%> работает как шарм!Моя таблица asp / HTML, которая возвращала пустую страницу с 2700 записями.Следующие строки отладки помогли выявить проблему буферизации: я заменил цикл Do While следующим образом и поиграл с моими предельными числами, чтобы увидеть, что происходит:

Заменить

DoПока не rs.EOF

'и т. Д .... ваш блок кода, который записывает строки таблицы

rs.moveNext

Loop

с

Do Пока пересчитать <2500 </p>

, если rs.EOF, то пересчитать = 2501

'и т. Д. ...Ваш блок кода, который записывает строки таблицы

rs.moveNext

Loop

response.write "recount =" & recount

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

3 голосов
/ 15 июня 2014

Вы можете увеличить лимит следующим образом:

  1. Стоп IIS.
  2. Найдите файл% WinDir% \ System32 \ Inetsrv \ Metabase.xml
  3. Изменить значение AspBufferingLimit. Значение по умолчанию - 4194304, что составляет около 4 МБ. Изменение его на 20 МБ (20971520).
  4. Перезагрузите IIS.
1 голос
/ 23 мая 2014

Еще один ответ на то же сообщение об ошибке (это только исправило мою проблему) заключается в том, что на системном диске недостаточно места. Имеется в виду около 700 КБ бесплатно. Удаление большого количества неиспользуемых вещей на этом действительно старом сервере, а затем перезапуск IIS и веб-сайта (вероятно, был необходим только IIS) приводят к тому, что проблема исчезает для меня.

Я уверен, что другие ответы более полезны для большинства людей, но для быстрого исправления просто убедитесь, что на системном диске есть свободное место.

0 голосов
/ 28 ноября 2018

В моем случае я просто пишу эту строку перед RS.Open .....

Response.Flush

rs.Открытый запрос, conn

0 голосов
/ 15 июля 2017

Если вы ищете причину и не хотите бороться с настройками системы, я столкнулся с двумя основными ситуациями:

  1. У вас может быть бесконечный цикл без next или recorddest.movenext
  2. Ваши текстовые данные очень большие, но вы думаете, что это не так! Обычная причина этой ситуации - скопировать и вставить изображение из Microsoft word прямо в редактор , и поэтому сервер преобразует изображение в объекты данных и сохраняет его в текстовом поле. Это может легко занять ресурсы базы данных и вызвать проблемы с буфером при повторном вызове данных.
...