IIS で Response.BinaryWrite を使用しているときに HTTP 500 または応答バッファーの制限を超えた場合のエラー

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

元の製品バージョン: Internet Information Services 7 以降のバージョン
元の KB 番号: 944886

現象

Internet Information Services (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 バイト フィールドに表示される最大の値を使用します。

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 アプリケーションのパフォーマンスが向上します。