チュートリアル : 同期 HTTP ハンドラの作成
更新 : 2007 年 11 月
このチュートリアルでは、要求の同期処理を実行する HTTP ハンドラを作成する方法について説明します。ハンドラの例では、URL が .sample で終わるリソースへの要求を ASP.NET アプリケーションで処理します。
URL が .sample で終わるリソースをユーザーが要求した場合、Web サーバーはその要求を 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 開発サーバーの詳細については、「Visual Web Developer における Web サーバー」を参照してください。IIS で要求を処理できるようにするには、このチュートリアルの後の手順を参照してください。
前提条件
このチュートリアルを実行するための要件は次のとおりです。
Visual Studio または Visual Web Developer。
IIS を使用して実行できる ASP.NET Web サイト。
IIS 6.0 または IIS 7.0。
同期 HTTP ハンドラ クラスの作成
カスタム HelloWorldHandler HTTP ハンドラ クラスを作成するには
操作する Web サイトにまだ App_Code ディレクトリがない場合は、サイトのルートの下に App_Code ディレクトリを作成します。
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 プロパティに文字列を書き込みます。
IIS 6.0 でのカスタム HTTP ハンドラの登録
カスタム HTTP ハンドラ クラスを作成した後、アプリケーションの Web.config ファイルに登録する必要があります。登録により、ASP.NET は URL の末尾が .sample であるリソースへの要求が行われたときにハンドラを見つけることができるようになります。
IIS 6.0 または IIS 7.0 のどちらを使用しているかによって、ハンドラを登録する方法は異なります。このセクションでは、IIS 6.0 でハンドラを登録する方法について説明します。次のセクションでは、IIS 7.0 でハンドラを登録する方法について説明します。
IIS 6.0 でハンドラを登録するには
Web サイトにまだ Web.config ファイルがない場合は、サイトのルートの下に Web.config ファイルを作成します。
Web.config ファイルに次の強調表示されたコードを追加します。
<configuration> <system.web> <httpHandlers> <add verb="*" path="*.sample" type="HelloWorldHandler"/> </httpHandlers> </system.web> </configuration>
構成要素により、カスタム ハンドラがクラス名で登録され、.sample ファイル名拡張子がハンドラにマップされます。
IIS マネージャを使用して、.sample 拡張子のアプリケーション拡張子の割り当てを登録します。詳細については、「方法 : IIS で HTTP ハンドラ拡張子を構成する」を参照してください。
IIS 7.0 でのカスタム 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 でハンドラを登録するには
Web サイトにまだ Web.config ファイルがない場合は、サイトのルートの下に Web.config ファイルを作成します。
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 でハンドラを登録するには
Web サイトにまだ Web.config ファイルがない場合は、サイトのルートの下に Web.config ファイルを作成します。
Web.config ファイルに次の強調表示されたコードを追加します。
<configuration> <system.webServer> <handlers> <add verb="*" path="*.sample" name="HelloWorldHandler" type="HelloWorldHandler"/> </handlers> </system.webServer> </configuration>
構成要素により、カスタム ハンドラがクラス名で登録され、.sample ファイル名拡張子がハンドラにマップされます。
メモ : 登録は、httpHandlers セクションではなく handlers セクションで行われます。name 属性は必須です。
カスタム HTTP ハンドラのテスト
カスタム HTTP ハンドラを作成して登録すると、それをテストできます。
カスタム HTTP ハンドラをテストするには
ブラウザで、Web アプリケーションからページを要求します。
ブラウザで、.sample で終わる URL を入力します。たとえば、次の URL を入力します。
https://localhost/SampleApplication/test.sample
HelloWorldHandler クラスで定義されたテキストが表示されます。
参照
処理手順
概念
IIS 5.0 および 6.0 における ASP.NET アプリケーションのライフ サイクルの概要