IIS で Response.BinaryWrite を使用する場合、HTTP 500 または応答バッファーの制限がエラーを超えました

この記事は、 メソッドを使用 Response.BinaryWrite してファイルを送信するときに発生するエラー (HTTP 500 または応答バッファーの上限を超えた) を解決するのに役立ちます。

元の製品バージョン: インターネット インフォメーション サービス 7 以降のバージョン
元の KB 番号: 944886

現象

インターネット インフォメーション サービス (IIS) 7 以降のバージョンがインストールされている Web サーバーからクライアント コンピューターにファイルを送信すると、次のようなエラー メッセージがクライアント コンピューターに表示されることがあります。

  • エラー メッセージ 1

    HTTP 500 - 内部サーバー エラー

  • エラー メッセージ 2

    応答オブジェクト エラー 'ASP 0251 : 80004005'
    応答バッファーの制限を超えました
    ASP ページを実行すると、応答バッファーが構成された制限を超えました。

  • エラー メッセージ 3

    さらに、IIS ログ ファイルに次のようなメッセージが表示される場合があります。

    ASP_0251_:_80004005|Response_Buffer_Limit_Exceeded

この問題は、 メソッドを Response.BinaryWrite 使用してファイルをクライアント コンピューターに送信し、プロパティが AspBufferingOn False に設定されている場合に発生 します

原因

この問題は、ASP 応答バッファリングが無効になっている場合、IIS によって既定の Active Server Pages (ASP) 応答バッファー値が 4 MB に適用されるために発生します。

ほとんどのシナリオでは、Web クライアントに送信される ASP 応答には、4 MB のバッファー制限で十分です。 この制限が不十分な場合は、次のいずれかの方法を使用します。

解決策 1: 応答サイズを小さくする

メソッドを使用 Response.BinaryWrite して ASP バッファリングがオフになっている場合にこの問題を解決するには、クライアントに返されるデータが 4 MB 以下であることを確認します。

応答が 4 MB の既定値より大きい場合、このサイズによってユーザー エクスペリエンスが低下することが多くなります。 Web ブラウザーは、ネットワーク経由で大きな応答を受け取る必要があります。 その後、Web ブラウザーで大きな HTML 応答を解析して表示する必要があります。

解決策 2: ASP 応答バッファリングを有効にし、バッファー制限を増やす

IIS メタベース プロパティを AspBufferingOn 使用して、アプリケーション レベルでバッファリングを有効または無効にすることができます。

注:

IIS 7 以降のバージョンでは、ファイルまたはファイルの ASP セクション<System.webserver>の値を使用bufferingOnして、アプリケーション レベルで ASP 応答バッファリングをApplicationHost.config有効またはWeb.config無効にすることができます。

ページ レベルでバッファリングを有効または無効にするには、 プロパティを Response.Buffer 使用します。

バッファー制限を増やす必要がある場合は、既知の最大応答サイズを許可するバッファー制限を選択します。 事前に最大の応答サイズがわからない場合は、テスト中にバッファーの制限を大きな値に増やすことができます。 テストが完了したら、IIS ログ ファイルの sc-bytes フィールドに表示される最大値を使用して、ページに対して生成される応答を指定します。

IIS 7 以降のバージョンでバッファリングの制限を増やすには、次の手順に従います。

  1. [ スタート] を選択し、[ 実行] を選択し、「 cmd」と入力して、[ OK] を選択します

  2. コマンドを cd /d %systemdrive%\inetpub\adminscripts 入力し、Enter キーを押します。

  3. コマンドを cscript.exe adsutil.vbs SET w3svc/aspbufferinglimit LimitSize 入力し、Enter キーを押します。

    注:

    LimitSize は、バッファーの制限サイズをバイト単位で表します。 たとえば、67108864番号は、バッファリング制限サイズを 64 MB に設定します。

バッファー制限が正しく設定されていることを確認するには、次の手順に従います。

  1. [ スタート] を選択し、[ 実行] を選択し、「 cmd」と入力して、[ OK] を選択します
  2. コマンドを cd /d %systemdrive%\inetpub\adminscripts 入力し、Enter キーを押します。
  3. コマンドを cscript.exe adsutil.vbs GET w3svc/aspbufferinglimit 入力し、Enter キーを押します。

詳細

メソッドを Response.BinaryWrite 使用し、ASP 応答バッファリングが無効になっている場合、ページのバッファリング制限プロパティが明示的に設定されていない限り、クライアントに送信できるデータは 4 MB のみです。 既定では、IIS 7 以降のバージョンの プロパティの値 bufferLimit は 4,194,304 バイトです。

さらに、ASP 応答バッファリングが BinaryWrite() オフになっている場合でも、クライアントへの応答がバッファー制限値より大きい場合、API は失敗します。

注:

ASP 応答バッファリングを有効にすることをお勧めします。 ASP 応答バッファリングにより、Web アプリケーションのパフォーマンスが向上します。