ApplicationHost.configの紹介

作成者 :Tobin Titus

発行日 : 2007 年 11 月 22 日 (作業者 : saad)

更新日 : 2008 年 3 月 11 日 (作業者 : saad)

はじめに 

ApplicationHost.config は、IIS 7.0 構成システムのルート ファイルです。このファイルには、すべてのサイト、アプリケーション、仮想ディレクトリ、およびアプリケーション プールの定義や、Web サーバー設定のグローバル既定値が記述されています (.NET Framework 設定の machine.config とルート web.config と同様)。

また ApplicationHost.config は、Web サーバーがインストールされているときに利用できる唯一の IIS 構成ファイルであるという点が特別です (ただし、ユーザーは必要に応じて web.config ファイルを追加できます)。このファイルには、すべての IIS と Windows Activation System (WAS) セクションを登録するための特別なセクション (configSections) があります (machine.config には、.NET Framework セクションに対して同じ概念があります)。ApplicationHost.config には、大部分の IIS セクションをグローバル レベルにロックダウンするための定義が記述されています。そのため既定では、階層内の下位レベルの web.config ファイルで上書きすることはできません。

ファイルの格納場所は現在 system32¥inetsrv ディレクトリですが、ベータ 2 以降は system32¥inetsrv¥config に変更される予定です。このドキュメントでは、すべてのセクションをファイルに記述されている順番で確認し、1 つずつ説明します。最も複雑なセクションは system.webServer ですので、特にこのセクションの説明は読み飛ばさないことをお勧めします。

以下の点に注意してください。

  1. このドキュメントでは、各構成セクションのコンテンツを applicationHost.config に記述されているように指定します。意図的に、セクションの多くは空か、不完全になっています (つまり、コンテンツの一部のみ XML で記述されています)。その他の値は、スキーマの既定値です。これは情報量が多すぎてファイルが乱雑になるのを回避し、無理なく理解できるようにするためです。

    各セクションにおける全プロパティの既定値とその有効範囲などを含む、完全なスキーマのリファレンスは、%windir%¥system32¥inetsrv¥config¥schema¥IIS_Schema.xml (IIS 設定用)、ASPNET_Schema.xml (ASP.NET 設定用)、または X_Schema.xml (その他の .NET Framework 設定用) を参照してください。

    便宜上、このドキュメントでは、これらのファイルの一部が適切なセクションに含まれていますので、読者は、利用可能なプロパティはどれか、既定値は何かなどについて、セクションごとに理解できます。スキーマ情報を読み取る方法については、以下のその他の注記を参照してください。

  2. ファイルを変更する場合は、最初にファイルをバックアップしてください。

このドキュメントには次のような内容が含まれています。

  • 構成スキーマを読み取る方法

  • セクション スキーマ

  • 属性スキーマ

  • 要素スキーマ

  • コレクション スキーマ

  • 列挙型スキーマ

  • フラグ スキーマ

  • 属性の検証

  • XML ヘッダー

  • <configSections> セクション

  • スキーマ

  • ロック

構成スキーマを読み取る方法

上で述べたように、このドキュメントには、セクションごとに断片的なスキーマ情報が含まれています。そのため読者は、利用可能なプロパティ、その既定値、および有効範囲を理解できます。断片的なスキーマ情報は、IIS 設定の構成スキーマ ファイル (%windir%¥system32¥inetsrv¥config¥schema¥IIS_Schema.xml) から直接取り出したものです。このセクションでは、スキーマ情報を読み取る方法について説明します。

各構成セクションのスキーマは XML 要素で定義されます。セクション グループのスキーマ定義はありません。スキーマを読み取る方法を説明するために、ここでは以下の形式を使用します。

<attribute-name>="<default-value>"  [<metadata>] [<description>]

<attribute-name> は、XML で使用されている構成属性の名前です。すべての属性には名前が必要です。

<default-value> は、属性に対するの値が XML で指定されていない場合に既定で使用される値です。すべての属性に既定値があるわけではありません (例 : サイト名)。この場合、構文は "" になります。

<metadata> には、次のようないくつかの項目が含まれます。

  • 属性のランタイム型。"bool"、"enum"、"flags"、"int"、"int64"、"String"、"timeSpan" のいずれかです。各属性に 1 つのランタイム型を指定する必要があります。
  • "bool" は "true" または "false" になります。
  • "enum" は利用可能な値のセットで、そのうち 1 つのみを属性に設定できます。このような値にはすべて、数値とフレンドリ名があります。構文では、フレンドリ名の間の区切り記号として文字 "|" を使用します。たとえば、value1|value2|…|valueN のように使用します。
  • "flags" は "enum" と似ていますが、値を組み合わせることができるという点が "enum" とは異なります。したがって、論理輪結合にして組み合わせを形成できるように、数値は 2 の倍数にする必要があります。構文は "enum" と同じです。たとえば、value1|value2|…|valueN のように使用します。
  • "int" は 32 ビット整数です。
  • "int64" は 64 ビット整数です。
  • "String" は文字列です。
  • "timeSpan" は、時間単位の表現で、マネージ コード型の TimeSpan と同様です。数値 (秒または分を表す) または "[dd:]hh:mm:ss" の形式でフォーマットされた文字列として指定できます。"[dd:]" 要素は、任意の日数を表します。その他の要素は、時間数、分数、秒数をそれぞれ表します。"timeSpanFormat" 属性は、秒数、分数、フォーマットされた文字列のどのフォーマットを使用するかを指定します。
  • 必須の属性には "Required" というマークが付きます。つまり、その属性の値は XML で設定する必要があります。たとえばサイト名は必須属性です (IIS 7.0 では、すべてのサイトに名前を付ける必要があります)。

<description> は、属性の簡単な説明です。

セクション スキーマ

<sectionSchema> XML 要素は、スキーマ情報の基本単位です。その他のすべてのスキーマ情報が、この中で指定されます。<sectionSchema> の内部には、1 つの属性 ("name") が直接記述されます。その他のスキーマは <sectionSchema> の下位要素内に記述されます。

< sectionSchema name=""  <!-- [String, Required] [XML full path of the section] --> >
    <!-- sub-elements here describing rest of schema; -->
    <!-- their description is right below in the doc. --> 
 </ sectionSchema > 

属性スキーマ

各属性は、スキーマ内の対応する <attribute> XML 要素内で定義されます。<attribute> 要素は、<sectionSchema> 要素に直接記述するか (属性がそのセクション範囲にある場合)、その要素内 (属性がセクションの下位要素にある場合)、または <collection> 要素内 (属性がセクションのコレクション内にある場合) に記述できます。

属性スキーマでは、属性に対して名前とランタイム型を指定する必要があります。属性スキーマでは、必要に応じて属性にマークを付けることができます。たとえば、属性を一意キー (コレクション内部にある場合)、または (他の属性を伴う) コレクション キーの一部としてマークできます。属性スキーマでは、属性の既定値を指定できます。また、ディスク上の自動暗号化のための属性をマークできます。属性スキーマでは、文字 "Infinite" が属性の値として許可されるかどうかを指定できます (型が int、in64 などの数値型または timeSpan の場合のみ)。さらに、timespan 属性に対して timespan フォーマット (秒数、分数、またはフォーマットされた文字列) を指定できます。属性の検証規則を指定することもできます (このドキュメントの「属性の検証」を参照してください)。

<attribute
    name=""  [String, Required] [XML name of the attribute]
    type=""  [bool|enum|flags|int|int64|string|timeSpan, Required][Runtime type]
    required="false"  [bool] [Indicates if must be set]
    isUniqueKey="false"    [bool] [Serves as the collection key]
    isCombinedKey="false"  [bool] [Part of a multi-attribute key]
    defaultValue=""  [String] [Default value or comma-delimited flags]
    encrypted="false"  [bool] [Indicates if value persisted encrypted]
    allowInfinite="false"  [bool] [Indicates if "Infinite" can be set]
    timeSpanFormat="string" [string|seconds|minutes] [hh:mm:ss or number]
    validationType=""       [See validation below]
    validationParameter=""  [See validation below]
/>

要素スキーマ

各要素は、スキーマ内の対応する <element> XML 要素内で定義されます。要素はネストすることができます。要素は、他の属性や下位要素の単なるコンテナーです。要素は名前が必要です。またコレクション要素の既定値のコンテナーとして機能できます (たとえば siteDefaults は、<sites> コレクション内のサイトの既定値を保持します)。

コレクション スキーマ

各コレクションは、スキーマ内の対応する <collection> XML 要素内で定義されます。コレクションには、複数の要素が含まれます。この要素は個別にコレクションに追加したりコレクションから削除したりできます。一般的にコレクションのディレクティブ名は "add"、"remove"、および "clear" ですが、一部のコレクションでは、わかりやすくするために別の名前を使用します (たとえば、"add" の代わりに "site" を使用します)。

名前を指定するには、コレクション スキーマ内の addElement、removeElement、および clearElement に値を指定します。コレクションのディレクティブがスキーマにない場合は、そのディレクティブはサポートされません。コレクション スキーマでは、コレクション要素に対する既定値のコンテナーとして使用される既定要素の名前を指定できます (これにより、要素スキーマ内の isCollectionDefault が補完されます)。

たとえば、siteDefaults が既定要素として使用されます。大部分のコレクションは、構成ファイルを名前空間に結合するときに要素をアペンドします。しかし一部のコレクションは、スキーマで mergeAppend="false" を指定してプリペンドを実行する場合があります。たとえば、2 つのレベルの構成について考えます。1 つのサイトに applicationHost.config と web.config があるとします。applicationHost.config の場合 :

< myCollection > 
    < add value="1" /> 
</ myCollection > 

web.config の場合 :

<myCollection>

    <add value="2" />        
</myCollection>

コレクションがアペンドを実行すると、サイト レベルのマージされた (有効) な構成は次のようになります。

<myCollection>

    <add value="1"/>

    <add value="2"/>    
</myCollection>

しかしコレクションがプリペンドを実行すると、構成は次のようになります。

<myCollection>

    <add value="2"/>

    <add value="1"/>    

</myCollection>

一部のコレクションは、スキーマで allowDuplicates="true" を指定して、エントリの重複を許可します。これが行われるのは、ほとんど .NET Framework の旧コレクション (machine.config 内) をサポートするためです。

一部のコレクションは、スキーマで指定されている以外の属性の追加を許可できます。許可するには、スキーマで allowUnrecognizedAttributes="true" と指定します。これが行われるのは、ほとんど .NET Framework のプロバイダーベースのコレクションをサポートするためです。

<collection            
    addElement=""     [String] [Name of Add directive, if supported]
    removeElement=""  [String] [Name of Remove directive, if supported]
    clearElement=""   [String] [Name of Clear directive, if supported]
    defaultElement="" [applicationDefaults|applicationPoolDefaults|siteDefaults|virtualDirectoryDefaults] [See isCollectionDefault]
    mergeAppend="true"  [bool] [Indicates whether or not deepest set values are appended]  
    allowDuplicates="false"  [bool] [Indicates if multiple elements may have the same keys]
    allowUnrecognizedAttributes="false"  [bool] [Indicates if non-schema attributes ok]
/>

列挙スキーマ

"enum" 型のすべての属性は、スキーマ内の対応する <enum> XML 要素内で列挙値を定義する必要があります。各値にはフレンド名と数値を指定する必要があります。

<enum name=""  [String, Required] [Friendly name of the enum]
    value="" [int, Required] [Numeric value]
/>

フラグ スキーマ

"flags" 型のすべての属性は、スキーマ内の対応する XML 要素内でフラグ値を定義する必要があります。各フラグには、フレンドリ名と、組み合わせを形成するために他の値と互いに論理輪結合できる数値を指定する必要があります。したがって値は 2 の倍数である必要があります。

<flags            
    name=""  [String, Required] [Friendly name of the flag]
    value="" [int in power of 2, Required] [Numeric value]
/>

属性の検証

属性の検証は、XML を構文解析しファイルからセクションを取得するとき、および構成 API を呼び出し、値を設定するときに実行されます。検証に失敗すると、目的の操作 (セクションの取得や無効な値の設定) にも失敗します。

各属性は、その値に対して 1 つの検証を関連付けることができます。関連付けるには、属性スキーマの中で、validationType に対して適切な検証名を指定し、validationParameter に対して追加パラメーターを指定します。

以下の検証がサポートされています。

ApplicationPoolName 検証

この検証は、次の文字で失敗します。 |<>&¥"

validationType="applicationPoolName" validationParameter=""

IntegerRange 検証

この検証は、値が範囲外 [内] の整数の場合に失敗します。

validationType="integerRange"
validationParameter="<minimum>,<maximum>[,exclude]" 

NonEmptyString 検証

この検証は、文字列の値が設定されている場合に失敗します。

validationType="nonEmptyString"
validationParameter="" 

SiteName 検証

この検証は、次の文字で失敗します。 /¥.?

validationType="siteName"
validationParameter=""

TimeSpanRange 検証

この検証は、値が範囲外 [内] の秒数の場合に失敗します。

validationType="timeSpanRange"
validationParameter="<minimum>,<maximum>,<granularity>[,exclude]" 

TrimWhiteSpace 検証

この検証は、空白が値の始めまたは終わりに設定されている場合に失敗します。

validationType="trimWhiteSpaceString"
validationParameter=""

XML ヘッダー

各構成ファイルは XML ファイルであり、任意で、最初の行に次の行を含めることができます。

<?xml version="1.0" encoding="UTF-8" ?>

また、XML <configuration> タグ内に、すべてのコンテンツを含める必要があります。

<configuration>

   <!-- [All of the context goes here] -->



</configuration>

ApplicationHost.config には、上述の行が含まれています。このドキュメントの残りで、ApplicationHost.config ファイルのその他のセクションを確認します。

<configSections> セクション

これは、ApplicationHost.config ファイルで真っ先に記述されるセクションです。このセクションには、ApplicationHost.config ファイルにあるその他の全セクションの一覧が含まれます。この目的はセクションの登録です (たとえばシステムからセクションの登録を取り消す場合は、このセクションからその行を削除します。スキーマ ファイルを config¥schema ディレクトリから削除する必要はありません)。

その他の構成ファイルでも、ファイルの最上部にセクションを記述することができます。これはグローバル レベルよりも低いレベルでセクションを登録するために便利です。これらのセクションは、名前空間の範囲内でのみ登録されます。Web.config ファイルは、システムへのセクションの追加のみを行うことができます。上位レベルで登録されたセクションを再定義したり、セクションを削除 (登録削除) したりすることはできません。

セクションは、含まれるセクション グループの階層で構造化されます。各セクションの登録では、セクション名、マネージ コード型のセクション ハンドラー (ApplicationHost.config ファイルでは意味がないため、ベータ 2 以降に削除されます。これは、System.Configuration のみで使用されます。そのため、machine.config と web.config ファイルには引き続き記述されます)、allowDefinition レベル (既定値と異なる場合)、および overrideModeDefault (この属性は、ApplicationHost.config ファイルの大部分の IIS セクションをロックダウンするために使用されます) を指定します。

: セクションは、構成設定の展開、登録、ロック、検索、および格納の基本単位です。各セクションは 1 つのセクション グループ ("すぐ上のセクション グループ") に所属します。セクション グループは論理的に関連するセクションのコンテナーで、階層を構造化するためだけに使用されます。セクション グループを操作することはできません。セクション グループには、構成設定を直接指定することはできません (設定はセクションに属します)。セクション グループはネストできますが、セクションはできません。

スキーマ

<section
    name=""  [Required, Collection Key] [XML name of the section]
    allowDefinition="Everywhere" [MachineOnly|MachineToApplication|Everywhere] [Level where it can be set]
    overrideModeDefault="Allow"  [Allow|Deny] [Default delegation mode]
/>

ロック

大部分の IIS セクションは、セクションで overrideModeDefault="Deny" を使用することにより、既定でロックダウンされています。セクションのロックを解除するには、次のようにタグを使用することをお勧めします。

<location path="Default Web Site" overrideMode="Allow" >

  <system.webServer>

    <asp/>


  </system.webServer>            

</location>

上述の location タグにより、既定の Web サイトのセクションのみがロック解除されます。すべてのサイトのセクションのロックを解除するには、applicationHost.config で指定します。

<location path="." overrideMode="Allow">

    <system.webServer>


         <asp/>

    </system.webServer>


</location>

: path="." と path="" は同じです。階層内の現在のレベルを参照します。