ASP 制限 <limits>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<asp> 要素の <limits> 要素は、インターネット インフォメーション サービス (IIS) 7.0 の Active Server Page (ASP) の接続およびキューに関する次の制限を指定します。

  • bufferingLimit 属性は、ASP バッファーの最大サイズを設定します。応答バッファー処理がオンにされている場合、この属性はフラッシュ前に ASP ページが応答バッファーに書き込むことができる最大バイト数を制御します。

  • maxRequestEntityAllowed 属性は、ASP 要求のエンティティ ボディに許可されるバイト数の最大値を指定します。Content-Length ヘッダーが存在し、指定されているデータの量が maxRequestEntityAllowed の値よりも大きい場合、IIS は HTTP 403 エラー応答を返します。

  • processorThreadMax 属性は、IIS が作成できる、プロセッサごとのワーカー スレッド数の最大値を指定します。

    : この設定は、Web アプリケーションのスケーラビリティおよびサーバーのパフォーマンス全般に大きな影響を与える可能性があります。この属性は同時に実行できる ASP 要求の最大数を定義するため、ASP アプリケーションが外部コンポーネントに対して拡張呼び出しを行っていない限り、この設定は既定値のままにする必要があります。

  • queueConnectionTestTime 属性は、クライアントがまだ接続中であるかどうかを ASP が判断するまでに要求をキューに入れておける秒数を指定します。queueConnectionTestTime 属性で指定された秒数よりも長く要求がキューに入れられた場合、ASP では、要求を実行する前にクライアントが接続中であるかどうかを確認します。クライアントが接続中でない場合、要求は処理されず、キューから削除されます。

    : 多くの場合、ユーザーが ASP ページの処理を数秒以上待つことはありません。最長待機時間はユーザーによって異なりますが、一般に許容される最大値は約 10 秒です。queueConnectionTestTime 属性を使用すると、ユーザーによって破棄された要求の処理に無駄な時間が費やされないようにすることができます。この属性は、ASP でスクリプトの処理が開始されるまでの間でのみ、ASP の処理を効率化するために役立ちます。ただし、スクリプトが実行されたら、ASP の組み込み Response オブジェクトの IsClientConnected メソッドを使用して、アプリケーションでクライアントの接続状態を適切な時点で継続的に確認する必要があります。

  • queueTimeout 属性は、ASP スクリプト要求がキュー内で待機できる時間を秒単位で指定します。要求がキューから取得されると、期限が切れているかどうか (このパラメーターの値よりも長く待機したかどうか) が確認されます。期限切れの要求は、サーバーがビジー状態であることを示すメッセージと共に拒否されます。

  • requestQueueMax 属性は、キューに許可される同時 ASP 要求数の最大値を指定します。キューがいっぱいのときにクライアント ブラウザーが ASP ファイルを要求しようとすると、そのブラウザーには "HTTP 500 サーバーはビジー状態" エラーが送信されます。

  • scriptTimeout 属性は、スクリプト終了前および Windows イベント ログへのイベントの記録前に、ASP ページでスクリプトが実行できる時間の長さの既定値を秒単位で指定します。ASP スクリプトは、ASP の組み込み Session オブジェクトの ScriptTimeout プロパティを使用することにより、この値を上書きできます。ScriptTimeout プロパティは、ASP アプリケーションでより大きいスクリプト タイムアウト値を設定できるようにします。たとえば、特定のユーザーがログインまたは商品の注文によって有効なセッションを確立したら、この設定を使用してタイムアウトを調整できます。

互換性

  IIS 7.0 IIS 6.0
注意 <asp><limits> は IIS 7.0 で新たに導入された要素です。 <limits> 要素は、IIS 6.0 の次のメタベース プロパティに代わるものです。

AspBufferingLimit
AspMaxRequestEntityAllowed
AspProcessorThreadMax
AspQueueConnectionTestTime
AspQueueTimeout
AspRequestQueueMax
AspScriptTimeout

セットアップ

Web サーバー上の ASP アプリケーションをサポートおよび構成するには、ASP モジュールをインストールする必要があります。ASP モジュールをインストールする手順は次のとおりです。

Windows Server 2008

  1. タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [サーバー マネージャー] をクリックします。

  2. [サーバー マネージャー] ウィンドウのツリー表示で、[役割] を展開して [Web サーバー (IIS)] をクリックします。

  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールして [役割サービスの追加] をクリックします。

  4. 役割サービスの追加ウィザードの [役割サービスの選択] ページで、[ASP] を選択します。

    拡大

  5. [ASP に必要な役割サービスを追加しますか] ダイアログ ボックスが表示されたら、[必要な役割サービスを追加] をクリックします (このページは、"ISAPI 拡張" 役割サービスをサーバーにまだインストールしていない場合にのみ表示されます)。

    拡大

  6. [役割サービスの選択] ページで [次へ] をクリックします。

  7. [インストール オプションの確認] ページで [インストール] をクリックします。

  8. [結果] ページで [閉じる] をクリックします。

Windows Vista

  1. タスク バーで [スタート] ボタンをクリックし、[コントロール パネル] をクリックします。

  2. コントロール パネルで、[プログラムと機能][Windows の機能の有効化または無効化] の順にクリックします。

  3. [Internet Information Services][World Wide Web サービス][アプリケーション開発機能] の順に展開します。

  4. [ASP] を選択して、[OK] をクリックします。

    拡大

方法

サーバーの ASP キャッシュ設定の構成方法

  1. タスク バーで [スタート] ボタンをクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。

  2. [接続] ウィンドウでサーバーの名前を強調表示します。

  3. サーバーの [ホーム] ウィンドウで [ASP] をダブルクリックします。

    拡大

  4. [ASP] ウィンドウで [制限プロパティ] セクションを展開し、必要な設定を構成して、[操作] ウィンドウの [適用] をクリックします。

    拡大

構成

属性

属性 説明
bufferingLimit オプションの unit 属性。

ASP バッファーの最大サイズをバイト単位で指定します。応答バッファー処理がオンにされている場合、この属性はフラッシュ前に ASP ページが応答バッファーに書き込むことができる最大バイト数を制御します。この値は、0 から 2147483647 までの整数です。

既定値は 4194304 です。
maxRequestEntityAllowed オプションの unit 属性。

ASP 要求のエンティティ ボディに許可されるバイト数の最大値を指定します。この値は、0 から 2147483647 までの整数です。

既定値は 200000 です。
processorThreadMax オプションの unit 属性。

ASP が作成できる、プロセッサあたりのワーカー スレッドの最大数を指定します。

既定値は 25 です。
queueConnectionTestTime オプションの timeSpan 属性。

ここで指定した時間間隔 (hh:mm:ss) が経過すると、要求を実行する前にクライアントがまだ接続しているかどうかを ASP が確認します。クライアントがもう接続していない場合は、要求は処理されず、キューから削除されます。

既定値は 00:00:03 です。
queueTimeout オプションの timeSpan 属性。

ASP 要求が要求キュー内で待機できる時間の最大値 (hh:mm:ss) を指定します。

既定値は 00:00:00 です。
requestQueueMax オプションの unit 属性。

要求キューに許可される同時 ASP 要求数の最大値を指定します。

既定値は 3000 です。
scriptTimeout オプションの timeSpan 属性。

スクリプト終了前および Windows イベント ログへのイベントの記録前に、ASP ページでスクリプトが実行できる時間の最大値 (hh:mm:ss) を指定します。

既定値は 00:01:30 です。

子要素

なし。

構成サンプル

次の構成サンプルでは、ASP スクリプトのタイムアウトを 2 分、ASP で要求を実行する前にクライアントがまだ接続中であるかどうかを確認するまでの時間を 5 秒、および要求キュー内の同時 ASP 要求数の最大値を 1,000 に設定します。

<configuration>
   <system.webServer>
      <asp>
         <cache diskTemplateCacheDirectory="%SystemDrive%\inetpub\temp\ASP Compiled Templates" />
         <limits scriptTimeout="00:02:00"
            queueConnectionTestTime="00:00:05"
            requestQueueMax="1000" />

      </asp>
   <system.webServer>
<configuration>

サンプル コード

次のコード サンプルでは、ASP スクリプトのタイムアウトを 2 分、ASP で要求を実行する前にクライアントが接続中であるかどうかを確認するまでの時間を 5 秒、および要求キュー内の同時 ASP 要求数の最大値を 1,000 に設定します。

AppCmd.exe

appcmd.exe set config -section:system.webServer/asp /limits.scriptTimeout:"00:02:00" /commit:apphost
appcmd.exe set config -section:system.webServer/asp /limits.queueConnectionTestTime:"00:00:05" /commit:apphost
appcmd.exe set config -section:system.webServer/asp /limits.requestQueueMax:"1000" /commit:apphost

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection aspSection = config.GetSection("system.webServer/asp");

         ConfigurationElement limitsElement = aspSection.GetChildElement("limits");
         limitsElement["scriptTimeout"] = TimeSpan.Parse("00:02:00");
         limitsElement["queueConnectionTestTime"] = TimeSpan.Parse("00:00:05");
         limitsElement["requestQueueMax"] = 1000;

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim aspSection As ConfigurationSection = config.GetSection("system.webServer/asp")

      Dim limitsElement As ConfigurationElement = aspSection.GetChildElement("limits")
      limitsElement("scriptTimeout") = TimeSpan.Parse("00:02:00")
      limitsElement("queueConnectionTestTime") = TimeSpan.Parse("00:00:05")
      limitsElement("requestQueueMax") = 1000

      serverManager.CommitChanges()
   End Sub

End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";

var aspSection = adminManager.GetAdminSection("system.webServer/asp", "MACHINE/WEBROOT/APPHOST");
var limitsElement = aspSection.ChildElements.Item("limits");
limitsElement.Properties.Item("scriptTimeout").Value = "00:02:00";
limitsElement.Properties.Item("queueConnectionTestTime").Value = "00:00:05";
limitsElement.Properties.Item("requestQueueMax").Value = 1000;

adminManager.CommitChanges();

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set aspSection = adminManager.GetAdminSection("system.webServer/asp", "MACHINE/WEBROOT/APPHOST")
Set limitsElement = aspSection.ChildElements.Item("limits")
limitsElement.Properties.Item("scriptTimeout").Value = "00:02:00"
limitsElement.Properties.Item("queueConnectionTestTime").Value = "00:00:05"
limitsElement.Properties.Item("requestQueueMax").Value = 1000

adminManager.CommitChanges()