web-dev-qa-db-ja.com

応答バッファの制限を超えました

データベースからデータを取得して表示するための簡単なクエリを実行しています。 Response Buffer Limit Exceededというエラーが表示されます。

エラー:応答オブジェクトエラー 'ASP 0251:80004005'
応答バッファの制限を超えました
/abc/test_maintenanceDetail.asp、行0
ASPページの実行により、応答バッファが設定された制限を超えました。

また、ループでResponse.flushを試し、ページの上部でresponse.buffer = falseを使用しましたが、まだデータを取得していません。

私のデータベースにはそのための5600レコードが含まれています。問題を解決するための手順またはコードを教えてください。

39
Samir

私はこれがかなり遅いことを知っていますが、この問題に遭遇した他の人にとって:何らかの種類のループ(私の場合はDo-While)を使用してデータを表示している場合は、次のレコードに移動していることを確認してください(私の場合、rs.MoveNext)。

49
SMM

マイクロソフトのサポートはこれを言う

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

しかし、GUIでは簡単です。

  • サーバーマネージャーで[ASP]をクリックします。
  • バッファ制限を4MBから64MBに変更します。
  • 適用して再起動します。
43
cmujica

これが発生している理由は、バッファリングがデフォルトでオンになっており、IIS 6は大きな応答を処理できないためです。

Classic ASPでは、ページ上部の<%@Language="VBScript"%>の後に以下を追加します:<%Response.Buffer = False%>

ASP.NETでは、Buffer="False"をPageディレクティブに追加します。例:<%@Page Language="C#" Buffer="False"%>

26
Muhammad Naveed

私は同じ種類の問題に直面しました、私のIISバージョンは8.5です。 Response Buffering Limitの下のASP -> Limit Propertiesを増やして問題を解決しました。

  1. IIS 8.5、プロジェクトを選択すると、右側にオプションが表示されます。IISでは、ASPオプションが表示されます。

ASP option

  1. オプションウィンドウで、Response Buffering Limit40194304(約40 MB)に増やします。

Increase buffer limit

  1. オプションから離れると、右側の上部にActionsメニューが表示され、SelectApply。それは私の問題を解決しました。

Apply settings

9
Arulkumar

サーバーレベルでバッファ制限を変更できない場合は、<%Response.Buffer = False%>メソッドを使用する必要があります。

ただし、まだこのエラーが発生し、ページに大きなテーブルがある場合、原因はテーブル自体である可能性があります。設計上、Internet Explorerの一部のバージョンは、コンテンツがページにレンダリングされる前の間にコンテンツ全体をバッファリングします。そのため、コンテンツをバッファリングしないようにページに指示している場合でも、テーブル要素がバッファリングされ、このエラーが発生する可能性があります。

別の解決策としては、テーブルの結果をページ分割することもありますが、テーブル全体を表示する必要があり、数千行ある場合は、テーブル生成ループの途中で次のコード行をスローします:<%Response.Flush%>。速度を考慮して、フラッシュが25行または100行程度ごとにのみ発生するように、基本的なカウンターを追加することも検討してください。

出力をバッファリングしないことの欠点:

  1. ページ全体の読み込みの減速
  2. コンテンツが読み込まれると、テーブルと列の幅が調整されます(テーブルは波打つように見えます)
  3. ユーザーは、リンクをクリックして、ページが完全に読み込まれる前にページを操作できます。したがって、ページの下部にjavascriptがある場合は、より速く移動するユーザーがクリックする前に、それを確実にロードするために上部に移動することができます。

詳細については、このKB記事を参照してください http://support.Microsoft.com/kb/925764

お役に立てば幸いです。

7
stevepowell2000

どうもありがとうございます! <%Response.Buffer = False%>魔法のように機能しました!約2700レコードで空白ページを返していた私のasp/HTMLテーブル。次のデバッグ行は、バッファリングの問題を明らかにするのに役立ちました。DoWhileループを次のように置き換え、制限値を再生して、何が起こっているかを確認しました。

置換

Rs.EOFではありませんが

'etc ....テーブルの行を書き込むコードブロック

rs.moveNext

Loop

with

2500未満のカウント中に実行

rs.EOFの場合、再カウント= 2501

'etc ....テーブルの行を書き込むコードブロック

rs.moveNext

Loop

response.write "recount ="&recount

バッファの問題かどうかを確認するために2500と2501を上下します。私のレコードセットでは、空白ページリターン、空白テーブルが約2700レコードで発生していることがわかりました。この問題を解決するために再び!あなたはこのようなシンプルで素晴らしい解決策!

5
Kalaine

次のように制限を増やすことができます。

  1. IISを停止します。
  2. ファイル%WinDir%\ System32\Inetsrv\Metabase.xmlを見つけます
  3. AspBufferingLimit値を変更します。デフォルト値は4194304で、約4 MBです。 20MB(20971520)に変更します。
  4. IISを再起動します。
3
shana

同じエラーメッセージに対するもう1つの答え(これで問題が解決しました)は、システムドライブのディスク領域が不足しているというものです。約700kbの空きがあります。この本当に古いサーバー上の多くの未使用のものを削除してからIISとWebサイト(おそらくIISのみが必要でした)を再起動すると、問題が消えます。

他の回答はほとんどの人にとってより役立つと確信していますが、簡単に修正するには、システムドライブに空き領域があることを確認してください。

1
Matt Dawdy

私の場合、rs.Open .....の前にこの行を書いています。

Response.flush

rs.Openクエリ、conn

0
Edison Neza

エラー「ASP 0251:80004005」の応答バッファ制限を次のように修正しました。

IIS 6のバッファリング制限を増やすには、次の手順に従います。

[スタート]ボタン、[ファイル名を指定して実行]の順にクリックし、cmdと入力して[OK]をクリックします。次のコマンドを入力し、Enterキーを押します。cd/d%systemdrive%\ inetpub\adminscripts次のコマンドを入力してEnterキーを押します。cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSizeメモLimitSizeはバッファリングの制限サイズをバイト単位で表します。たとえば、67108864という数値は、バッファリングの制限サイズを64 MBに設定します。バッファー制限が正しく設定されていることを確認するには、次の手順を実行します。

[スタート]ボタン、[ファイル名を指定して実行]の順にクリックし、cmdと入力して[OK]をクリックします。次のコマンドを入力してEnterキーを押します。cd/d%systemdrive%\ inetpub\adminscripts次のコマンドを入力してEnterキーを押します。cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit

https://support.Microsoft.com/en-us/kb/944886 を参照

0
Blair

理由を探していて、システム設定と戦いたくない場合、これらは私が直面した2つの主要な状況です。

  1. nextまたはrecordest.movenextのない無限ループがある場合があります
  2. テキストデータは非常に大きいですが、そうではないと思います!この状況の一般的な理由は、Microsoft Wordからエディターに直接イメージをコピーして貼り付けるであるため、サーバーはイメージをデータオブジェクトに変換し、テキストフィールドに保存します。これは、データベースリソースを簡単に占有し、データを再度呼び出すときにバッファの問題を引き起こす可能性があります。
0
Ali Sheikhpour