アプリケーション プール <applicationPools>

概要

<applicationPools> 要素には、インターネット インフォメーション サービス (IIS) 7 以降のサーバーで実行されるすべてのアプリケーション プールの構成設定が含まれます。 アプリケーション プールは、そのアプリケーション プールに割り当てられている 1 つ以上のアプリケーションの要求を処理する共通設定で構成された、1 つ以上のワーカー プロセスのグループを定義します。 アプリケーション プールを使用すると、類似した構成の 1 つ以上のワーカー プロセスを一連の Web アプリケーションが共有できるため、サーバー コンピューター上の他の Web アプリケーションから一連の Web アプリケーションを分離するのに便利です。 プロセス境界は、各ワーカー プロセスを分離します。そのため、あるアプリケーション プールのアプリケーションの問題は、他のアプリケーション プール内の Web サイトやアプリケーションに影響しません。 アプリケーション プールを使用すると、Web インフラストラクチャの信頼性と管理のしやすさの両方が大幅に向上します。

インストール時に IIS から提供される既定のアプリケーション プールを使用することも、独自のアプリケーション プールを作成することもできます。 IIS 7 以降のサーバーでアプリケーション プールを必要な数だけ実行できますが、サーバーのパフォーマンスに影響する可能性があります。 アプリケーション プールには、1 つ以上のワーカー プロセスを含めることができます。 各ワーカー プロセスは、Web サイト、Web アプリケーション、または Web サービスに対して実行されている作業を表します。 複数のワーカー プロセスを 1 つのアプリケーション プールで実行できるようにして、Web ガーデンを作成できます。

IIS 7 以降では、各アプリケーション プールは、ASP.NET アプリケーションの実行に 2 つの .NET 統合モード ([統合] または [クラシック]) のいずれかを使用します。 アプリケーション プールに対して定義されている .NET 統合モードは、そのアプリケーション プールで実行されるサイト、アプリケーション、および Web サービスへの着信要求を IIS が処理する方法を決定します。

  • [統合] モードは、IIS が IIS 7 以降の統合パイプラインを使用してアプリケーション プール内の要求を処理できるようにします。 これで、要求されたリソースの種類に関係なく、ASP.NET モジュールが IIS 要求処理に関与できます。 統合モードを使用すると、ASP.NET 2.0 要求パイプラインの使用可能な機能を、静的コンテンツや ASP、PHP、その他のコンテンツ タイプの要求が使用できるようになります。 既定では、IIS 7 以降のアプリケーション プールはこのモードで実行されます。
  • [クラシック] モードは、IIS 6.0 の処理パイプラインを使用して、ASP.NET アプリケーションをホストします。 このモードでは、まず IIS 7 以降のモジュール経由で要求が処理され、次に ASP.NET 要求が aspnet_isapi.dll によってさらに処理されます。 ASP.NET 処理パイプラインは IIS 7 以降の処理パイプラインとは別個であり、ASP.NET 要求処理パイプライン機能を他のリソースの種類で使用することはできません。 これは、ASP.NET 要求が両方のプロセス モデルで認証モジュールと承認モジュールを通過する必要があることを意味します。 これは統合モードほど効率的ではありませんが、ASP.NET バージョン 1.1 を使用して開発されたアプリケーションを、統合モードで実行するようにアプリケーションを変更することなく IIS 7 以降のサーバーで実行できます。

IIS 7.5 以降の新機能

IIS 7.5 以降では、managedRuntimeLoaderCLRConfigFile、および <add> 要素の startMode 属性を使用して、自動的に起動するようにアプリケーションを構成できます。 これらの属性は、それぞれ、アプリケーションのランタイム読み込みを提供するマネージド DLL の名前、アプリケーションの共通言語ランタイム構成ファイル、およびアプリケーションのスタートアップの種類を構成します。

IIS 7.5 以降の新機能には、<processModel> 要素の identityType 属性の新しい ApplicationPoolIdentity 型もあります。 この新しい ID 型が、アプリケーションの既定のプロセス ID になり、コンテンツ領域のセキュリティを設定して、特定のアプリケーション プールへのアクセスを許可できるようになりました。 これを行うには、"IIS AppPool\DefaultAppPool" のような構文を使用して、アプリケーション プールの名前を使ってセキュリティを設定します。この ID は動的に作成されるため、攻撃対象になるサーバー領域が大幅に減少します。

互換性

バージョン メモ
IIS 10.0 <applicationPools> 要素は IIS 10.0 では変更されませんでした。
IIS 8.5 <applicationPools> 要素は IIS 8.5 では変更されませんでした。
IIS 8.0 <applicationPools> 要素は IIS 8.0 では変更されませんでした。
IIS 7.5 <applicationPools> 要素の <add> 要素が IIS 7.5 で更新され、managedRuntimeLoaderCLRConfigFilestartMode の各属性を使用してアプリケーションを事前に読み込み、新しい ApplicationPoolIdentity を使用してアプリケーションを実行できるようにする属性が含まれました。
IIS 7.0 <applicationPools> 要素が IIS 7.0 で導入されました。
IIS 6.0 <applicationPools> 要素は、IIS 6.0 の IIsApplicationPools メタベース オブジェクトを置き換えます。

段取り

<applicationPools> コレクションは、IIS 7 以降の既定のインストールに含まれています。

操作方法

新しいアプリケーション プールの作成方法

  1. 次のようにインターネット インフォメーション サービス (IIS) マネージャーを開きます。

    • Windows Server 2012 または Windows Server 2012 R2 を使用している場合:

      • タスク バーで、[サーバー マネージャー] をクリックし、[ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows 8 または Windows 8.1 を使用している場合:

      • Windows キーを押しながら文字 X を押し、[コントロール パネル] をクリックします。
      • [管理ツール] をクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
    • Windows Server 2008 または Windows Server 2008 R2 を使用している場合:

      • タスク バーで、[スタート] ボタンをクリックし、[管理ツール][インターネット インフォメーション サービス (IIS) マネージャー] の順にクリックします。
    • Windows Vista または Windows 7 を使用している場合:

      • タスク バーで、[スタート][コントロール パネル] の順にクリックします。
      • [管理ツール] をダブルクリックし、[インターネット インフォメーション サービス (IIS) マネージャー] をダブルクリックします。
  2. [接続] ウィンドウでサーバー名を展開し、[アプリケーション プール] をクリックします。

  3. [操作] ウィンドウで [アプリケーション プールの追加...] をクリックします。

  4. [アプリケーション プールの追加] ダイアログ ボックスで [名前] ボックスにアプリケーション プールの名前を入力し、[.NET Framework バージョン] ドロップダウン リストでサイトまたはアプリケーションが使用する .NET Framework バージョンを選び、[マネージド パイプライン モード] ドロップダウン リストで [統合] または [クラシック] を選択して、[OK]クリックします。
    [アプリケーション プールの追加] ダイアログ ボックスのスクリーンショット。[名前]、[dot NET Framework バージョン]、[マネージド パイプライン モード] フィールドが表示されています。

既存のサイトまたはアプリケーションのアプリケーション プールの構成方法

  1. [接続] ウィンドウで、[サイト] を展開し、アプリケーション プールを追加する先の Web サイトまたはアプリケーションにアクセスします。
  2. [操作] ウィンドウの [詳細設定...] をクリックします。
  3. [詳細設定] ダイアログ ボックスの [全般] セクションで、[アプリケーション プール] エントリをクリックし、省略記号ボタンをクリックします。
    [アプリケーション プール] エントリが強調表示されている [詳細設定] ダイアログ ボックスのスクリーンショット。
  4. [アプリケーション プールの選択] ダイアログ ボックスで、[アプリケーション プール] ドロップダウン ボックスからアプリケーション プールを選び、[OK] をクリックして、もう一度 [OK] をクリックします。
    [アプリケーション プールの選択] ダイアログ ボックスの [アプリケーション プール] フィールドのスクリーンショット。使用可能なオプションのドロップダウン メニューが含まれています。

構成

<applicationPools> 要素には、<add> 要素のコレクションが含まれます。 コレクション内の各要素は、IIS 7 以降で実行されるアプリケーション プールを構成します。 各 <add> 要素には少なくとも、GUI およびコマンド ライン管理ツールに対してアプリケーション プールを識別する name 属性が含まれます。 <add> 要素には、アプリケーション プールのプロセス モデル、CPU、およびリサイクル設定を構成する子要素が含まれます。

<applicationPools> 要素には、IIS 7 以降のサーバー上のすべてのアプリケーション プールの既定の設定を定義する <applicationPoolDefaults> 要素も含まれます。 サーバー全体の既定のアプリケーション プール設定を変更するために、<applicationPoolDefaults> 要素を編集できます。 新しいアプリケーション プールを作成すると、そのアプリケーション プールの構成設定が、<applicationPoolDefaults> 要素で設定された既定値をオーバーライドします。

属性

なし。

子要素

要素 説明
add アプリケーション プールを applicationPools セクションに追加します。
applicationPoolDefaults 必須の文字列属性です。

applicationPools セクション内のすべてのアプリケーション プールの既定の設定を構成します。

構成サンプル

次の構成サンプルは、アプリケーション プールの <add> 要素と <applicationPools> 要素を使用して、IIS の標準アプリケーション プールと既定値を定義します。

<applicationPools>
   <add name="DefaultAppPool" />
   <add name="Classic .NET AppPool" managedPipelineMode="Classic" />
   <applicationPoolDefaults>
      <processModel identityType="NetworkService" />
   </applicationPoolDefaults>
</applicationPools>

サンプル コード

次の例は、Contoso という名前のアプリケーション プールを追加し、マネージド パイプライン モードを [統合] に設定します。

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso',autoStart='True',managedPipelineMode='Integrated']" /commit:apphost

Note

AppCmd.exe を使用してこれらの設定を構成するときは、commit パラメーターを必ず apphost に設定する必要があります。 これで、ApplicationHost.config ファイルの適切な場所セクションに構成設定がコミットされます。

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 applicationPoolsSection = config.GetSection("system.applicationHost/applicationPools");

      ConfigurationElementCollection applicationPoolsCollection = applicationPoolsSection.GetCollection();

      ConfigurationElement addElement = applicationPoolsCollection.CreateElement("add");
      addElement["name"] = @"Contoso";
      addElement["autoStart"] = true;
      addElement["managedPipelineMode"] = @"Integrated";
      applicationPoolsCollection.Add(addElement);

      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 applicationPoolsSection As ConfigurationSection = config.GetSection("system.applicationHost/applicationPools")
      Dim applicationPoolsCollection As ConfigurationElementCollection = applicationPoolsSection.GetCollection
      Dim addElement As ConfigurationElement = applicationPoolsCollection.CreateElement("add")
      addElement("name") = "Contoso"
      addElement("autoStart") = True
      addElement("managedPipelineMode") = "Integrated"
      applicationPoolsCollection.Add(addElement)
      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

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

var applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools",
   "MACHINE/WEBROOT/APPHOST");

var applicationPoolsCollection = applicationPoolsSection.Collection;

var addElement = applicationPoolsCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "Contoso";
addElement.Properties.Item("autoStart").Value = true;
addElement.Properties.Item("managedPipelineMode").Value = "Integrated";
applicationPoolsCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set applicationPoolsSection = adminManager.GetAdminSection("system.applicationHost/applicationPools","MACHINE/WEBROOT/APPHOST")
Set applicationPoolsCollection = applicationPoolsSection.Collection

Set addElement = applicationPoolsCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "Contoso"
addElement.Properties.Item("autoStart").Value = True
addElement.Properties.Item("managedPipelineMode").Value = "Integrated"
applicationPoolsCollection.AddElement(addElement)

adminManager.CommitChanges()