ASP.NET の HttpHandler とは何ですか? なぜ、どのように使われるのですか?
6 に答える
簡単に言うと、ASP.NET HttpHandler はSystem.Web.IHttpHandler
インターフェイスを実装するクラスです。
ASP.NET HTTPHandlers は、ASP.NET Web アプリケーション サーバーに対して行われた要求をインターセプトする役割を果たします。これらは、ASP.NET サイトに対する要求に応じてプロセスとして実行されます。最も一般的なハンドラーは、.aspx ファイルを処理する ASP.NET ページ ハンドラーです。ユーザーが .aspx ファイルを要求すると、要求はページ ハンドラーを通じてページによって処理されます。
ASP.NET には、いくつかの既定の HTTP ハンドラーが用意されています。
- ページ ハンドラー (.aspx): Web ページを処理します。
- ユーザー コントロール ハンドラー (.ascx): Web ユーザー コントロール ページを処理します。
- Web サービス ハンドラー (.asmx): Web サービス ページを処理します。
- トレース ハンドラー (trace.axd): トレース機能を処理します。
カスタム出力をブラウザーにレンダリングする独自のカスタム HTTP ハンドラーを作成できます。ASP.NET での HTTP ハンドラーの一般的なシナリオは、たとえば次のとおりです。
- 動的に作成された画像 (チャートなど) またはサイズ変更された画像の配信。
- RSS 形式の XML を発行する RSS フィード
同期ハンドラーを作成するためのインターフェースと、非同期ハンドラーを作成するためのインターフェースを実装します。インターフェイスでは、メソッドとプロパティを実装する必要があります。IHttpHandler
IHttpAsyncHandler
ProcessRequest
IsReusable
このProcessRequest
メソッドは、行われたリクエストの実際の処理を処理しますが、BooleanIsReusable
プロパティは、(パフォーマンスを向上させるために) 再利用のためにハンドラーをプールできるかどうか、または各リクエストに新しいハンドラーが必要かどうかを指定します。
(HttpHandler
またはIHttpHandler
) は基本的に、コンテンツの提供を担当するものです。ASP.NET ページ (aspx) は、ハンドラーの一種です。
たとえば、Web サーバー自体からではなくデータベースから画像などを提供したり、(SOAP/WCF/etc ではなく) 単純な POX サービスを作成したりするために、独自のサービスを作成することができます。
HttpHandler の例、
ASP.NET 2.0 の HTTP ハンドラー
ハンドラーは、ブラウザーからの要求を満たす責任があります。ブラウザーが管理する要求は、ファイル拡張子によって処理されるか、ハンドラーを直接呼び出すことによって処理されます。着信 Http 要求を処理する低レベルの要求および応答 API は、Asp.Net の Http ハンドラーです。すべてのハンドラーは、System.Web 名前空間にある IHttpHandler インターフェイスを実装します。ハンドラーは、インターネット サーバー アプリケーション プログラミング インターフェイス (ISAPI) 拡張機能にいくらか似ています。
IHttpHandler インターフェイスを実装して同期ハンドラーを作成し、IHttpAsyncHandler インターフェイスを実装して非同期ハンドラーを作成します。インターフェイスでは、ProcessRequest メソッドと IsReusable プロパティを実装する必要があります。ProcessRequest メソッドは、行われた要求の実際の処理を処理します。一方、Boolean の IsReusable プロパティは、ハンドラーを再利用してパフォーマンスを向上させるためにプールできるかどうか、または要求ごとに新しいハンドラーが必要かどうかを指定します。
.ashx ファイル拡張子は、カスタム ハンドラー用に予約されています。ファイル名拡張子が .ashx のカスタム ハンドラーを作成すると、IIS および ASP.NET 内に自動的に登録されます。別のファイル拡張子を使用する場合は、IIS および ASP.NET 内で拡張子を登録する必要があります。.ashx 以外の拡張子を使用する利点は、複数のファイル拡張子を 1 つのハンドラーに割り当てることができることです。
HTTP ハンドラーの構成
構成セクション ハンドラーは、着信 URL を IHttpHandler または IHttpHandlerFactory クラスにマッピングする役割を果たします。これは、コンピューター、サイト、またはアプリケーション レベルで宣言できます。サブディレクトリはこれらの設定を継承します。管理者は tag ディレクティブを使用してセクションを構成します。ディレクティブは、上から順に解釈および処理されます。セクション ハンドラには次の構文を使用します。
HTTP ハンドラの作成
HTTP ハンドラーを作成するには、IHttpHandler インターフェイスを実装する必要があります。IHttpHandler インターフェイスには、次のシグネチャを持つ 1 つのメソッドと 1 つのプロパティがあります。bool IsReusable {get;}