[INFO] ASP.NET の HTTP モジュールと HTTP ハンドラの概要

この記事は、以前は次の ID で公開されていました: JP307985
概要
この資料では、ASP.NET の HTTP モジュールと HTTP ハンドラの概要を紹介します。

ASP.NET の概要に関するその他の情報については、次の「サポート技術情報」 (Microsoft Knowledge Base) の資料を参照してください。
305140 ASP.NET ロードマップ
詳細
HTTP のモジュールと HTTP ハンドラは、ASP.NET アーキテクチャに不可欠な部分です。要求が処理される時には、それぞれの要求が複数の HTTP モジュール (たとえば、認証モジュールやセッション モジュール) で処理され、その後、単一の HTTP ハンドラによって処理されます。ハンドラが要求を処理すると、その要求は HTTP モジュールを通って、経路を逆に戻ります。

この資料では、以下の内容について説明します。

モジュールは、ハンドラが実行される前後に呼び出されます。モジュールを使用すると、開発者は各要求を途中で捕捉したり、その要求に参加したり、または要求を変更したりすることができます。モジュールは、System.Web 名前空間の中にある IHttpModule インターフェイスを実装しています。

先頭に戻る

HttpApplication クラスでは、モジュールの同期を行うためのイベントが多数提供されています。それぞれの要求に対して、各モジュールが同期を取るために次のイベントが利用可能です。以下、イベントを発生する順に説明します。
  • BeginRequest : 要求が開始されました。要求の最初に何かを行う必要がある場合 (ページの一番上に広告バナーを表示するなど)、このイベントに対して同期を取ります。
  • AuthenticateRequest : 独自の認証スキームを組み込む場合 (データベースに対してユーザーの照会を行ってパスワードの検証を行うなど)、このイベントに同期するモジュールを作成し、必要な方法でユーザーの認証を行います。
  • AuthorizeRequest : このイベントは、認証メカニズム (アクセス制御リスト (ACL) をファイル システムではなくデータベースに保管するなど) を実装するために内部的に使用されます。このイベントをオーバーライドすることもできますが、あまり意味を持ちません。
  • ResolveRequestCache : このイベントは、ページが出力キャッシュによって提供されるかどうかを決定します。独自のキャッシュ用モジュールを記述する場合 (メモリ キャッシュではなくファイルベースのキャッシュを作成するなど)、このイベントに対して同期を取り、ページをキャッシュから取得するかどうかを決定してください。
  • AcquireRequestState : セッションの状態は、状態ストアから取得されます。独自の状態管理モジュールを作成する場合は、このイベントに対して同期を取って、セッションの状態を状態ストアから取得してください。
  • PreRequestHandlerExecute : このイベントは、HTTP ハンドラが実行される前に発生します。
  • PostRequestHandlerExecute : このイベントは、HTTP ハンドラが実行された後に発生します。
  • ReleaseRequestState : セッションの状態が、状態ストアに再度保存されます。ユーザー定義のセッション状態モジュールを作成する場合は、状態を状態ストアに再度保存する必要があります。
  • UpdateRequestCache : このイベントにより、出力が出力キャッシュに書き戻されます。ユーザー定義のキャッシュ モジュールを作成する場合は、そのキャッシュに出力を書き込んでください。
  • EndRequest : 要求が完了しました。要求全体を通じて情報を集めるデバッグ用モジュールを作成し、後でその情報をページに書き込むこともできます。
それぞれの要求の送信に対して、モジュールが同期を取るために次のイベントが利用可能です。これらのイベントの順序は一意には決まりません。
  • PreSendRequestHeaders : このイベントは、ヘッダーが送信される前に発生します。追加のヘッダーを付加する必要がある場合は、ユーザー定義のモジュールからこのイベントに対して同期を取ることができます。
  • PreSendRequestContent : このイベントは、Response.Flush メソッドが呼び出されると発生します。追加の内容を付加する必要がある場合は、ユーザー定義のモジュールからこのイベントに対して同期を取ることができます。
  • Error : このイベントは、対応できない例外が発生すると発生します。ユーザー定義のエラー ハンドラ モジュールを記述する場合は、このイベントに対して同期を取ります。
先頭に戻る

<httpModules> 構成セクションのハンドラには、アプリケーション内の HTTP モジュールを構成する役割があります。これは、コンピュータ、サイト、またはアプリケーション レベルで宣言できます。<httpModules> セクションのハンドラには、次の構文を使用します。
<httpModules>   <add type="[COM+ Class], [Assembly]" name="[ModuleName]" />   <remove name="[ModuleName]" />   <clear /></httpModules>				
先頭に戻る

HTTP モジュールを作成するには、IHttpModule インターフェイスを実装する必要があります。IHttpModule インターフェイスには、次のシグニチャを持つ 2 つのメソッドがあります。
void Init(HttpApplication);void Dispose();				
HTTP モジュール作成の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308000 [HOW TO] Visual Basic .NET を使用して ASP.NET HTTP モジュールを作成する方法
307996 [HOW TO] Visual C# .NET を使用して ASP.NET HTTP モジュールを作成する方法
先頭に戻る

ハンドラは、個々のエンドポイントの要求を処理するために使用されます。ハンドラを使用することで、ASP.NET フレームワークは個々の HTTP URL や URL 拡張子のグループをアプリケーション内で処理できます。モジュールとは異なり、要求を処理するために使用されるハンドラは 1 つだけです。すべてのハンドラは、IHttpHandler インターフェイスを実装します。このインターフェイスは System.Web 名前空間にあります。ハンドラは、ISAPI (Internet Server Application Programming Interface) 拡張と、ある意味で似ています。

先頭に戻る

<httpHandlers> 構成セクションのハンドラは、受け取った URL を IHttpHandler クラスや IHttpHandlerFactory クラスにマッピングする役割を持っています。これは、コンピュータ、サイト、またはアプリケーション レベルで宣言できます。サブディレクトリでは、これらの設定が継承されます。

管理者は、<add> タグ ディレクティブを使用して、<httpHandlers> セクションを構成できます。<add> ディレクティブは、上から下の順序で解釈および処理されます。<httpHandlers> セクションのハンドラには、次の構文を使用します。
<httpHandlers>   <add verb="[verb list]" path="[path/wildcard]" type="[COM+ Class], [Assembly]" validate="[true/false]" />   <remove verb="[verb list]" path="[path/wildcard]" />   <clear /></httpHandlers>				
先頭に戻る

HTTP ハンドラを作成するには、IHttpHandler インターフェイスを実装する必要があります。IHttpHandler インターフェイスには、次のシグニチャを持つ 1 つのメソッドと 1 つのプロパティがあります。
void ProcessRequest(HttpContext);bool IsReusable {get;}				
: HTTP ハンドラでセッションの状態が必要な場合は、IRequiresSessionState インターフェイスも実装する必要があります。 HTTP ハンドラ作成の関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308001 [HOW TO] Visual C# .NET を使用して ASP.NET HTTP ハンドラを作成する方法
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
307997 [HOW TO] Visual Basic .NET を使用して ASP.NET HTTP ハンドラを作成する方法
先頭に戻る
プロパティ

文書番号:307985 - 最終更新日: 12/01/2005 08:58:11 - リビジョン: 3.2

Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0

  • kbarttyperoadmap kbhttphandlers kbhttpmodule kbhttpruntime kbinfo KB307985
フィードバック