IIS で Response.BinaryWrite を使用する場合、HTTP 500 または応答バッファーの制限を超えたエラー
この記事は、Active Server Pages (ASP) で Response.BinaryWrite
メソッドを使用してファイルを送信するときに発生するエラー (HTTP 500 または応答バッファーの上限を超えました) を解決するのに役立ちます。
元の製品バージョン: インターネット インフォメーション サービス、Active Server Pages (ASP)
元の KB 番号: 944886
現象
以下のシナリオについて考えてみます。
- インターネット インフォメーション サービス (IIS) がインストールされている Web サーバーからクライアント コンピューターにファイルを送信します。
Response.BinaryWrite
メソッドを使用してクライアント コンピューターにファイルを送信し、AspBufferingOn
プロパティを False に設定します。
このシナリオでは、クライアント コンピューターで次のいずれかのエラー メッセージが表示されることがあります。
エラー メッセージ 1
HTTP 500 - 内部サーバー エラー
エラー メッセージ 2
応答オブジェクト エラー 'ASP 0251 : 80004005'
応答バッファーの制限を超えました
ASP ページを実行すると、応答バッファーが構成された制限を超えました。
さらに、IIS ログ ファイルに次のようなメッセージが表示される場合があります。
ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded
原因
この問題は、ASP 応答バッファリングが無効になっている場合に、IIS によって既定の ASP 応答バッファー値 4 MB が適用されるために発生します。
ほとんどのシナリオでは、Web クライアントに送信される ASP 応答には 4 MB のバッファー制限で十分です。 この制限が不十分な場合は、次のいずれかの方法を使用します。
解決策 1: 応答サイズを小さくする
Response.BinaryWrite
メソッドを使用し、ASP バッファリングがオフになっているときにこの問題を解決するには、クライアントに返されるデータが 4 MB を超えないことを確認します。
応答が 4 MB の既定値より大きい場合、このサイズはユーザー エクスペリエンスの低下を引き起こす可能性があります。 Web ブラウザーは、ネットワーク経由で大きな応答を受信する必要があります。 次に、Web ブラウザーで大きな HTML 応答を解析して表示する必要があります。
解決策 2: ASP 応答バッファリングを有効にしてバッファー制限を増やす
AspBufferingOn
IIS メタベース プロパティを使用して、アプリケーション レベルでバッファリングを有効または無効にすることができます。
Note
IIS では、アプリケーション レベルで ASP 応答バッファリングを有効または無効にするには、ApplicationHost.config
ファイルまたはWeb.config
ファイルの<System.webserver>
の ASP セクションのbufferingOn
値を使用します。
ページ レベルでバッファリングを有効または無効にするには、 Response.Buffer
プロパティを使用できます。
バッファー制限を増やす必要がある場合は、既知の最大応答サイズを許可するバッファー制限を選択します。 事前に最大の応答サイズがわからない場合は、テスト中にバッファーの制限を大きな値に増やすことができます。 テストが完了したら、ページに対して生成される応答の IIS ログ ファイルの sc-bytes フィールドに表示される最大値を使用します。
IIS のバッファリング制限を引き上げるには、次の手順に従います。
Start を選択し、Run を選択し、「cmd」と入力して、OK を選択します。
cd /d %systemdrive%\inetpub\adminscripts
コマンドを入力し、Enter を選択します。cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize
コマンドを入力し、Enter を選択します。Note
LimitSize
は、バッファリングの制限サイズをバイト単位で表します。 たとえば、67108864数によって、バッファリングの制限サイズが 64 MB に設定されます。
バッファー制限が正しく設定されていることを確認するには、次の手順に従います。
- Start を選択し、Run を選択し、「cmd」と入力して、OK を選択します。
cd /d %systemdrive%\inetpub\adminscripts
コマンドを入力し、Enter を選択します。cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit
コマンドを入力し、Enter を選択します。
詳細
Response.BinaryWrite
メソッドを使用し、ASP 応答バッファリングが無効になっている場合、ページのバッファリング制限プロパティが明示的に設定されていない限り、クライアントに送信できるデータは 4 MB のみです。 既定では、IIS の bufferLimit
プロパティの値は 4,194,304 バイトです。
さらに、ASP 応答バッファリングがオフになっている場合でも、クライアントへの応答がバッファー制限値より大きい場合、 BinaryWrite()
API は失敗します。
Note
ASP 応答バッファリングを有効にすることをお勧めします。 ASP 応答バッファリングにより、Web アプリケーションのパフォーマンスが向上します。