ハンドラーの追加: <add>

概要

<handlers> コレクションの <add> 要素は、インターネット インフォメーション サービス (IIS) 7 用の HTTP ハンドラーのリストにハンドラーを追加します。

互換性

バージョン メモ
IIS 10.0 <add> 要素は IIS 10.0 では変更されませんでした。
IIS 8.5 <add> 要素は IIS 8.5 では変更されませんでした。
IIS 8.0 <add> 要素は IIS 8.0 では変更されませんでした。
IIS 7.5 <add> 要素は IIS 7.5 では変更されませんでした。
IIS 7.0 <handlers> コレクションの <add> 要素は IIS 7.0 で導入されました。
IIS 6.0 該当なし

段取り

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

操作方法

統合モードで実行されている IIS 7 アプリケーションで ASP.NET ハンドラーのハンドラー マッピングを作成する方法

  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. [ホーム] ペインで、[ハンドラー マッピング] をダブルクリックします。
    既定の Web サイトのホーム ページが表示されている I I S マネージャーのスクリーンショット。[ハンドラー マッピング] アイコンが強調表示されています。

  4. [操作] ペインで、[マネージド ハンドラーの追加] をクリックします。

  5. [マネージド ハンドラーの追加] ダイアログ ボックスで、以下を指定します。

    • [要求パス]。 マップするファイル名またはファイル名拡張子。

    • Type。 マネージド ハンドラーの型 (クラス) の名前。 ハンドラーがアプリケーションの app_code または bin フォルダーで定義されている場合、その型の名前がドロップダウン リストに表示されます。

    • 名前。 わかりやすい名前。

      [マネージド ハンドラーの追加] ダイアログ ボックスのスクリーンショット。

  6. [OK] をクリックして [マネージド ハンドラーの追加] ダイアログ ボックスを閉じます。

FastCGI のハンドラー マッピングを作成する方法

  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. [接続] ペインで、FastCGI ハンドラー マッピングを構成するサーバー名をクリックします。

  3. [ホーム] ウィンドウで、[ハンドラー マッピング] をダブルクリックします。
    [サーバー] ホーム ページが表示されている [I I S マネージャー] ウィンドウのスクリーンショット。ハンドラー マッピングのアイコンが強調表示されています。

  4. [操作] ペインで、[モジュール マッピングの追加] をクリックします。

    Note

    次の手順を実行するには、指定するファイル パスまたはファイル名拡張子を実行するバイナリが既にインストールされている必要があります。 この例では、Microsoft の Web サイトから利用できる PHP の実装を使います。

  5. [要求パス] ボックスにファイル名拡張子 (.php など) を入力し、[モジュール] ドロップダウン リストで [FastCGIModule] をクリックし、[実行可能ファイル] ボックスにスクリプト エンジン (この例では、PHP-CGI.exe) へのパスを入力して、[OK] をクリックします。
    [モジュール マッピングの追加] ダイアログ ボックスのスクリーンショット。

  6. [モジュール マッピングの追加] ダイアログ ボックスで、[はい] をクリックします。
    [モジュール マッピング情報の追加] ダイアログ ボックスのスクリーンショット。

構成

属性

属性 説明
allowPathInfo 省略可能な Boolean 属性です。

ハンドラーが URI 内の完全なパスの情報 (contoso/marketing/imageGallery.aspx など) を処理するかどうかを指定します。 値が true の場合、ハンドラーは完全なパス contoso/marketing/imageGallery を処理します。 値が false の場合、ハンドラーはパスの最後のセクション /imageGallery のみを処理します。

既定値は false です。
modules 省略可能な文字列属性。

ファイル名またはファイル名と拡張子をマップする 1 つまたは複数のモジュールの名前を指定します。 複数の値を指定する場合は、値をコンマ (,) で区切ります。

既定値は ManagedPipelineHandler です。
name 必須の文字列属性です。

ハンドラー マッピングの一意の名前を指定します。
path 必須の文字列属性です。

ハンドラー マッピングを適用するファイル名またはファイル名拡張子を指定します。
preCondition 省略可能な文字列属性。

ハンドラーを実行する条件を指定します。

preCondition 属性には、次の使用可能な値のうち 1 つ以上を指定できます。 複数の値を指定する場合は、値をコンマ (,) で区切ります。
Value 説明
bitness32 ハンドラーが 32 ビットの .dll ファイルの場合は、bitness32 値を指定します。IIS は、64 ビット オペレーティング システム上で WOW64 モード (32 ビット シミュレーション) で実行されているワーカー プロセスに対してのみ、ハンドラーを読み込む必要があります。
bitness64 ハンドラーが 64 ビットの .dll ファイルの場合は、bitness64 値を指定します。IIS は、64 ビット モードで実行されているワーカー プロセスに対してのみ、ハンドラーを読み込む必要があります。
integratedMode 統合要求処理パイプラインを使うように構成されているアプリケーション プール内の要求にのみ、ハンドラーが応答する必要がある場合は、integratedMode 値を指定します。
ISAPIMode クラシック モードを使うように構成されているアプリケーション プール内の要求にのみ、ハンドラーが応答する必要がある場合は、ISAPIMode 値を指定します。
runtimeVersionv1.1 .NET Framework バージョン 1.1 を使うように構成されているアプリケーション プール内の要求にのみ、ハンドラーが応答する必要がある場合は、runtimeVersionv1.1 値を指定します。
runtimeVersionv2.0 .NET Framework バージョン 2.0 を使うように構成されているアプリケーション プール内の要求にのみ、ハンドラーが応答する必要がある場合は、runtimeVersionv2.0 値を指定します。
requireAccess 省略可能な列挙型属性。

ハンドラーがリソースに対して必要なアクセスの種類を指定します。

requireAccess 属性には、次の使用可能な値の 1 つ以上を指定できます。 複数の値を指定する場合は、値をコンマ (,) で区切ります。 既定値は Script です。
Value 説明
実行 ハンドラーに実行可能ファイルを実行する権限が必要であることを指定します。

数値は 4 です。
なし ハンドラーにアクセス権の要件がないことを指定します。

数値は 0 です。
読み取り ハンドラーに読み取りアクセス許可が必要であることを指定します。

数値は 1 です。
スクリプト ハンドラーにスクリプトを実行する権限が必要であることを指定します。

数値は 3 です。
書き込み ハンドラーに書き込みアクセス許可が必要であることを指定します。

数値は 2 です。
resourceType 省略可能な文字列属性。

ハンドラー マッピングを適用するリソースの種類を指定します。

resourceType 属性には、次の使用可能な値の 1 つを指定できます。 既定値は Unspecified です。
Value 説明
Directory ハンドラー マッピングがディスク上の物理的なフォルダーに対する要求のみに適用されることを指定します。

数値は 1 です。
Either ハンドラー マッピングがディスク上の物理的なファイルまたはフォルダーに対する要求に適用されることを指定します。

数値は 2 です。
File ハンドラー マッピングがディスク上の物理的なファイルに対する要求のみに適用されることを指定します。

数値は 0 です。
Unspecified マッピングの種類が指定されていないことを指定します。 ハンドラー マッピングは、要求がディスク上の物理的なファイルまたはフォルダーにマップされるかどうかに関係なく、要求に適用されます。 ディスク上に存在しないファイル名またはファイル名拡張子 (MyHandler.axd など) にハンドラーをマップするときは、この設定を使います。

数値は 3 です。
responseBufferLimit 省略可能な uint 属性。

要求ハンドラー用の応答バッファーの最大サイズ (バイト単位) を指定します。

既定値は 4194304 バイトです。
scriptProcessor 省略可能な文字列属性。

要求を処理する ISAPI 拡張機能の .dll ファイルまたは Common Gateway Interface (CGI) の .exe ファイルの物理パスを指定します。

scriptProcessor 属性は、スクリプト マップ ハンドラーのマッピングにのみ必要です。 ハンドラーを ISAPI 拡張機能にマップする場合は、modules 属性に ISAPIModule を指定する必要があります。 ハンドラーを CGI ファイルにマップする場合は、modules 属性に CGIModule を指定する必要があります。
type 省略可能な文字列属性。

マネージド ハンドラーの名前空間パスを指定します。 type 属性は、マネージド ハンドラーに対してのみ必要です。
verb 必須の文字列属性です。

ハンドラー マッピングを適用する HTTP 動詞を指定します。

子要素

なし。

構成サンプル

次の例には、ハンドラー マッピングを定義する 2 つの <add> 要素が含まれています。 1 番目の <add> 要素では、IIS 7 統合モードで実行されている Web アプリケーションの SampleHandler ハンドラーを定義しています。 ハンドラー アセンブリを Web アプリケーションの app_code ディレクトリに追加する場合、type 属性の値にアセンブリ名を含める必要はありません。 2 番目の <add> 要素では、FastCGI モジュールを使う PHP 要求のマッピングを定義しています。

<handlers>
   <add name="SampleHandler" verb="*" 
      path="SampleHandler.new" 
      type="SampleHandler, SampleHandlerAssembly" 
      resourceType="Unspecified" />
   <add name="PHP-FastCGI" verb="*" 
      path="*.php" 
      modules="FastCgiModule"
      scriptProcessor="c:\php\php-cgi.exe" 
      resourceType="Either" />
</handlers>

サンプル コード

次の例では、PHP モジュールの FastCGI マッピングを追加してから、PHP 要求を処理するハンドラーを Contoso Web サイトに追加します。

AppCmd.exe

appcmd.exe set config -section:system.webServer/fastCgi /+"[fullPath='c:\php\php-cgi.exe']" /commit:apphost

appcmd.exe set config "Contoso" -section:system.webServer/handlers /+"[name='PHP-FastCGI',path='*.php',verb='GET,HEAD,POST',modules='FastCgiModule',scriptProcessor='c:\php\php-cgi.exe',resourceType='Either']"

Note

この 2 番目の例では、特定の URL に対する SampleHandler.new という名前の新しい ASP.NET ハンドラー マッピングを、Web アプリケーションに追加する方法を示します。

appcmd.exe set config /section:system.webServer/handlers /+[name=SampleHandler',path='SampleHandler.new',verb='*',type='SampleHandler']

C#

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

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration appHostConfig = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection fastCgiSection = appHostConfig.GetSection("system.webServer/fastCgi");
         ConfigurationElementCollection fastCgiCollection = fastCgiSection.GetCollection();
         ConfigurationElement applicationElement = fastCgiCollection.CreateElement("application");
         applicationElement["fullPath"] = @"c:\php\php-cgi.exe";
         fastCgiCollection.Add(applicationElement);

         Configuration webConfig = serverManager.GetWebConfiguration("Contoso");
         ConfigurationSection handlersSection = webConfig.GetSection("system.webServer/handlers");
         ConfigurationElementCollection handlersCollection = handlersSection.GetCollection();
         ConfigurationElement addElement = handlersCollection.CreateElement("add");
         addElement["name"] = @"PHP-FastCGI";
         addElement["path"] = @"*.php";
         addElement["verb"] = @"GET,HEAD,POST";
         addElement["modules"] = @"FastCgiModule";
         addElement["scriptProcessor"] = @"c:\php\php-cgi.exe";
         addElement["resourceType"] = @"Either";
         handlersCollection.AddAt(0, 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 appHostConfig As Configuration = serverManager.GetApplicationHostConfiguration
      Dim fastCgiSection As ConfigurationSection = appHostConfig.GetSection("system.webServer/fastCgi")
      Dim fastCgiCollection As ConfigurationElementCollection = fastCgiSection.GetCollection
      Dim applicationElement As ConfigurationElement = fastCgiCollection.CreateElement("application")
      applicationElement("fullPath") = "c:\php\php-cgi.exe"
      fastCgiCollection.Add(applicationElement)

      Dim webConfig As Configuration = serverManager.GetWebConfiguration("Contoso")
      Dim handlersSection As ConfigurationSection = webConfig.GetSection("system.webServer/handlers")
      Dim handlersCollection As ConfigurationElementCollection = handlersSection.GetCollection
      Dim addElement As ConfigurationElement = handlersCollection.CreateElement("add")
      addElement("name") = "PHP-FastCGI"
      addElement("path") = "*.php"
      addElement("verb") = "GET,HEAD,POST"
      addElement("modules") = "FastCgiModule"
      addElement("scriptProcessor") = "c:\php\php-cgi.exe"
      addElement("resourceType") = "Either"
      handlersCollection.AddAt(0, addElement)

      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST");
var fastCgiCollection = fastCgiSection.Collection;
var applicationElement = fastCgiCollection.CreateNewElement("application");
applicationElement.Properties.Item("fullPath").Value = "c:\\php\\php-cgi.exe";
fastCgiCollection.AddElement(applicationElement);
adminManager.CommitChanges();

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso";
var handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso");
var handlersCollection = handlersSection.Collection;
var addElement = handlersCollection.CreateNewElement("add");
addElement.Properties.Item("name").Value = "PHP-FastCGI";
addElement.Properties.Item("path").Value = "*.php";
addElement.Properties.Item("verb").Value = "GET,HEAD,POST";
addElement.Properties.Item("modules").Value = "FastCgiModule";
addElement.Properties.Item("scriptProcessor").Value = "c:\\php\\php-cgi.exe";
addElement.Properties.Item("resourceType").Value = "Either";
handlersCollection.AddElement(addElement, 0);
adminManager.CommitChanges();

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set fastCgiSection = adminManager.GetAdminSection("system.webServer/fastCgi", "MACHINE/WEBROOT/APPHOST")
Set fastCgiCollection = fastCgiSection.Collection
Set applicationElement = fastCgiCollection.CreateNewElement("application")
applicationElement.Properties.Item("fullPath").Value = "c:\php\php-cgi.exe"
fastCgiCollection.AddElement applicationElement
adminManager.CommitChanges()

adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso"
Set handlersSection = adminManager.GetAdminSection("system.webServer/handlers", "MACHINE/WEBROOT/APPHOST/Contoso")
Set handlersCollection = handlersSection.Collection
Set addElement = handlersCollection.CreateNewElement("add")
addElement.Properties.Item("name").Value = "PHP-FastCGI"
addElement.Properties.Item("path").Value = "*.php"
addElement.Properties.Item("verb").Value = "GET,HEAD,POST"
addElement.Properties.Item("modules").Value = "FastCgiModule"
addElement.Properties.Item("scriptProcessor").Value = "c:\php\php-cgi.exe"
addElement.Properties.Item("resourceType").Value = "Either"
handlersCollection.AddElement addElement, 0
adminManager.CommitChanges()