チュートリアル : 同期 HTTP ハンドラーの作成

Visual Studio 2010

このチュートリアルでは、要求の同期処理を実行する HTTP ハンドラーを作成する方法について説明します。 ハンドラーの例では、URL が .sample で終わるリソースへの要求を ASP.NET アプリケーションで処理します。

URL が .sample で終わるリソースをユーザーが要求すると、Web サーバーはその要求を ASP.NET に転送します。 ASP.NET は HTTP ハンドラーを呼び出し、HTTP ハンドラーが応答を返します。 応答は、ハンドラーによって動的に作成されます。 ファイル名の拡張子が .sample であるファイルが存在していなくてもかまいません。

ASP.NET ランタイムが IIS 6.0 と対話する方法の詳細については、「IIS 5.0 および 6.0 における ASP.NET アプリケーションのライフ サイクルの概要」を参照してください。 ASP.NET と IIS 7.0 との統合の詳細については、「IIS 7.0 における ASP.NET アプリケーションのライフ サイクルの概要」を参照してください。

このチュートリアルでは、以下のタスクを行います。

  • HTTP ハンドラー クラスのコードを作成する方法。 このクラスにより ProcessRequest メソッドと IsReusable プロパティが実装される必要があります。

  • Web.config ファイルにハンドラーを登録して .sample 拡張子にマップする方法。

  • インターネット インフォメーション サービス (IIS: Internet Information Service) で .sample ファイル名拡張子を ASP.NET にマップする方法。

    メモメモ

    ASP.NET 開発サーバーは、新しいハンドラーの参照を含むように構成ファイルが変更された後で、リソースへの要求を処理します。 ASP.NET 開発サーバーの詳細については、「ASP.NET Web プロジェクト用の Visual Studio の Web サーバー」を参照してください。 IIS で要求を処理できるようにするには、このチュートリアルの後の手順を参照してください。

このチュートリアルを完了するための要件は次のとおりです。

  • Visual Studio または Visual Web Developer。

  • IIS を使用して実行できる ASP.NET Web サイト。

  • IIS 6.0 または IIS 7.0。

このチュートリアルでは、IIS を使用して Web サイトを実行する必要があります。

IIS で実行される Web サイトを作成するには

  1. Visual Studio または Visual Web Developer を開きます。

  2. [ファイル] メニューの [新しい Web サイト] をクリックします。

  3. [場所] ボックスの一覧の [HTTP] をクリックし、テキスト ボックスに「http://localhost/HttpHandler」と入力します。

  4. [OK] をクリックします。

カスタム HelloWorldHandler HTTP ハンドラー クラスを作成するには

  1. ソリューション エクスプローラーで、プロジェクトを右クリックし、[ASP.NET フォルダーの追加] をクリックして、[App_Code] をクリックします。

  2. HelloWorldHandler という名前のクラスを App_Code フォルダーに作成し、次のコードをクラス ファイルに追加します。

    Imports System.Web
    
    Public Class HelloWorldHandler
        Implements IHttpHandler
    
        Public Sub ProcessRequest(ByVal context As _
                System.Web.HttpContext) Implements _
                System.Web.IHttpHandler.ProcessRequest
            Dim request As HttpRequest = context.Request
            Dim response As HttpResponse = context.Response
            ' This handler is called whenever a file ending 
            ' in .sample is requested. A file with that extension
            ' does not need to exist.
            response.Write("<html>")
            response.Write("<body>")
            response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>")
            response.Write("</body>")
            response.Write("</html>")
        End Sub
    
        Public ReadOnly Property IsReusable() As Boolean _
                Implements System.Web.IHttpHandler.IsReusable
            Get
                Return False
            End Get
        End Property
    End Class
    

    using System.Web;
    public class HelloWorldHandler : IHttpHandler
    {
        public HelloWorldHandler()
        {
        }
        public void ProcessRequest(HttpContext context)
        {
            HttpRequest Request = context.Request;
            HttpResponse Response = context.Response;
            // This handler is called whenever a file ending 
            // in .sample is requested. A file with that extension
            // does not need to exist.
            Response.Write("<html>");
            Response.Write("<body>");
            Response.Write("<h1>Hello from a synchronous custom HTTP handler.</h1>");
            Response.Write("</body>");
            Response.Write("</html>");
        }
        public bool IsReusable
        {
            // To enable pooling, return true here.
            // This keeps the handler in memory.
            get { return false; }
        }
    }
    

    このコードは ProcessRequest メソッドを実装し、現在の HttpContext オブジェクトの Response プロパティに文字列を書き込みます。

カスタム HTTP ハンドラー クラスを作成した後、アプリケーションの Web.config ファイルに登録する必要があります。 登録により、ASP.NET は URL の末尾が .sample であるリソースへの要求が行われたときにハンドラーを見つけることができるようになります。

IIS 6.0 または IIS 7.0 のどちらを使用しているかによって、ハンドラーを登録する方法は異なります。 このセクションでは、IIS 6.0 でハンドラーを登録する方法について説明します。 次のセクションでは、IIS 7.0 でハンドラーを登録する方法について説明します。

IIS 6.0 でハンドラーを登録するには

  1. Web サイトにまだ Web.config ファイルがない場合は、サイトのルートの下に Web.config ファイルを作成します。

  2. Web.config ファイルに次の強調表示されたコードを追加します。

    <configuration>
      <system.web>
        <httpHandlers>
          <add verb="*" path="*.sample" 
            type="HelloWorldHandler"/>
        </httpHandlers>
      </system.web>
    </configuration>
    

    構成要素により、カスタム ハンドラーがクラス名で登録され、.sample ファイル名拡張子がハンドラーにマップされます。

    IIS マネージャーを使用して、.sample 拡張子のアプリケーション拡張子の割り当てを登録します。 詳細については、「方法 : IIS で HTTP ハンドラー拡張子を構成する」を参照してください。

IIS 7.0 では、クラシック モードまたは統合モードでアプリケーションを実行できます。 クラシック モードでは、要求は IIS 6.0 の場合とほぼ同じ方法で処理されます。 統合モードでは、IIS 7.0 は要求、モジュール、およびその他の機能を ASP.NET と共有できるようにするパイプラインを使用して要求を管理します。

IIS 7.0 でのハンドラーの登録には、Web.config ファイルまたは IIS マネージャーへのハンドラーの登録が必要です。 IIS 7.0 では管理が一元化されているため、アプリケーションの Web.config ファイルで行った変更は、アプリケーションの IIS マネージャー インターフェイスに反映されます。その逆もまた同様です。 次の手順では、Web.config ファイルでハンドラーを登録します。

IIS 7.0 向けにハンドラーを登録する方法は、クラシック モードおよび統合モードのどちらで実行されているかにより異なります。 使用している IIS モードでの手順に従います。

クラシック モードで実行されている IIS 7.0 でハンドラーを登録するには

  1. Web サイトにまだ Web.config ファイルがない場合は、サイトのルートの下に Web.config ファイルを作成します。

  2. Web.config ファイルに次の強調表示されたコードを追加します。

    メモメモ

    aspnet_isapi.dll ファイルを正しいパスに置き換えます。 .dll ファイルは、.NET Framework がインストールされているフォルダーにあります。 既定では、これは C:\WINDOWS\Microsoft.NET\Framework\version です。

    <configuration>
      <system.web>
        <httpHandlers>
          <add verb="*" path="*.sample" 
            type="HelloWorldHandler"/>
        </httpHandlers>
      </system.web>
        <system.webServer>
            <handlers>
                <add  verb="*" path="*.sample"
                      name="HelloWorldHandler"
                      type="HelloWorldHandler"
                      modules="IsapiModule"/>
                      scriptProcessor="%path%\aspnet_isapi.dll"
            </handlers>
        </system.webServer>
    </configuration>
    

    構成要素により、カスタム ハンドラーがクラス名で登録され、.sample ファイル名拡張子がハンドラーにマップされます。

    メモメモ

    カスタム ファイル名拡張子を登録するので、handlers セクションと httpHandlers セクションの両方にハンドラーを登録します。 クラシック モードでは、下位互換性を確保するために、ハンドラーは modules 属性を使用して ISAPI モジュールとして指定されます。 ASP.NET ISAPI dll のパスは、scriptProcessor 属性を使用して指定されます。 name 属性は handlers セクションでは必須です。

統合モードで実行されている IIS 7.0 でハンドラーを登録するには

  1. Web サイトにまだ Web.config ファイルがない場合は、サイトのルートの下に Web.config ファイルを作成します。

  2. Web.config ファイルに次の強調表示されたコードを追加します。

    <configuration>
      <system.webServer>
        <handlers>
          <add verb="*" path="*.sample" 
            name="HelloWorldHandler"
            type="HelloWorldHandler"/>
        </handlers>
      </system.webServer>
    </configuration>
    

    構成要素により、カスタム ハンドラーがクラス名で登録され、.sample ファイル名拡張子がハンドラーにマップされます。

    メモメモ

    登録は、httpHandlers セクションではなく handlers セクションで行われます。 name 属性は必須です。

カスタム HTTP ハンドラーを作成して登録すると、それをテストできます。

カスタム HTTP ハンドラーをテストするには

  1. ブラウザーで、Web アプリケーションからページを要求します。

  2. ブラウザーで、.sample で終わる URL を入力します。 たとえば、次の URL を入力します。

    http://localhost/HttpHandler/test.sample
    

    HelloWorldHandler クラスで定義されたテキストが表示されます。

表示: