次の方法で共有


ハンドラー <ハンドラー>

概要

<handlers>要素は、特定のファイル名拡張子または URL に登録されているハンドラーを定義します。

ハンドラーはインターネット インフォメーション サービス (IIS) コンポーネントであり、通常は要求リソースの応答を生成するために、特定のコンテンツへの要求を処理するように構成されます。 たとえば、ASP.NET Web ページは 1 種類のハンドラーです。 ハンドラーを使用すると、静的ファイルではないユーザーに情報を返す必要があるリソースへの要求を処理できます。 IIS には、静的ファイル、Common Gateway Interface (CGI) アプリケーション、FastCGI アプリケーション、および Internet Server API (ISAPI) 拡張機能をサポートするために、いくつかの異なるハンドラーの種類が用意されています。 ASP.NET では、HTTP ハンドラー インターフェイスを介した追加のハンドラー型のサポートも提供します。

開発者は、アプリケーションでファイル名拡張子を使用して識別できる特別な処理を実行するカスタム ハンドラーを作成できます。 たとえば、開発者が RSS 形式の XML を作成するハンドラーを作成した場合、アプリケーションの.rssファイル名拡張子をカスタム ハンドラーにバインドできます。 開発者は、特定のファイルにマップするハンドラーを作成し、これらのハンドラーをネイティブ モジュールとして、または ASP.NET IHttpHandler インターフェイスの実装として実装することもできます。

Compatibility

バージョン 注記
IIS 10.0 <handlers>要素は IIS 10.0 では変更されませんでした。
IIS 8.5 <handlers>要素は IIS 8.5 では変更されませんでした。
IIS 8.0 <handlers>要素は IIS 8.0 で変更されませんでした。
IIS 7.5 <handlers>要素は IIS 7.5 で変更されませんでした。
IIS 7.0 <handlers>要素は IIS 7.0 で導入されました。
IIS 6.0 N/A

設定

<handlers>要素は、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. [ホーム] ウィンドウで、[ハンドラー マッピング] をダブルクリックします。
    ハンドラー マッピング機能が選択されている [ホーム] ウィンドウのスクリーンショット。

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

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

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

    • 。 マネージド ハンドラーの型 (クラス) 名。 ハンドラーがアプリケーションの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. [ホーム] ウィンドウで、[ハンドラー マッピング] をダブルクリックします。
    スクリーンショットには、ハンドラー マッピング機能が選択された [サーバー ホーム] ウィンドウが表示されます。

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

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

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

  6. [ モジュール マッピングの追加 ] ダイアログ ボックスで、[ はい] をクリックします。
    実行可能ファイル用の Fast C G I アプリケーションを作成するかどうかを確認する [モジュール マッピングの追加] ダイアログ ボックスを示すスクリーンショット。

コンフィギュレーション

<handlers>要素には<add>要素のコレクションが含まれており、それぞれがアプリケーションのハンドラー マッピングを定義します。 <add>要素には、ハンドラーの名前、ハンドラーのマップ先のファイル名拡張子または URL パス マスク、ハンドラーの実装を指定するモジュール名または HTTP ハンドラー型 ASP.NET、その他の設定が含まれます。

<handlers>要素は、Web.config ファイルのアプリケーション レベルで構成します。

Attributes

特性 Description
accessPolicy 省略可能な flags 属性。

ハンドラー コレクション全体のアクセスの種類のレベルを指定します。

accessPolicy 属性には、次のいずれかの値を指定できます。 既定値は Readです。
価値 Description
Execute ディレクトリとファイルの実行権限を必要とするハンドラー コレクション内のハンドラーを有効にします。
None ディレクトリまたはファイルへのアクセスを必要とするハンドラー コレクション内のすべてのハンドラーを無効にします。
NoRemoteExecute ハンドラーコレクション内のハンドラーがリモート要求を受信したときに実行可能ファイルを実行できないようにします。
NoRemoteRead ハンドラーがリモート要求を受信したときにハンドラー コレクション内のハンドラーがファイルを読み取らないようにします。
NoRemoteScript ハンドラーがリモート要求を受信したときに、ハンドラー コレクション内のハンドラーがスクリプトを実行できないようにします。
NoRemoteWrite ハンドラーがリモート要求を受信したときに、ハンドラー コレクション内のハンドラーがファイルを作成または変更できないようにします。
Read ディレクトリとファイルへの読み取りアクセスを必要とするハンドラー コレクション内のハンドラーを有効にします。
Script ディレクトリまたはファイルに対するスクリプト権限を必要とするハンドラー コレクション内のハンドラーを有効にします。
Source (読み取りフラグと共に) ソース コードへの読み取りアクセスを必要とするハンドラー コレクション内のハンドラー、またはソース コードへの書き込 アクセスを ( 書き込み フラグと共に) 有効にします。
Write ディレクトリとファイルへの書き込みアクセスを必要とするハンドラー コレクション内のハンドラーを有効にします。

accessPolicy属性は、適用可能なセキュリティ ポリシーではなく、構成時にrequiredAccess属性に基づいて実行されるハンドラーを決定するフィルター処理メカニズムです。 フィルター処理されたハンドラーは構成の一部であり、この属性に基づいて実行するように選択されていなくても初期化される可能性があります。

子要素

要素 Description
add 省略可能な要素。

ハンドラーのコレクションにハンドラーを追加します。
clear 省略可能な要素。

ハンドラー コレクションからハンドラーへのすべての参照を削除します。
remove 省略可能な要素。

ハンドラー コレクションからハンドラーへの参照を削除します。

構成サンプル

次の例には、ハンドラー マッピングを定義する 2 つの <add> 要素が含まれています。 最初の <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']"

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

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();

VB スクリプト

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()