Asp.Netフレームワーク(IHttpHandlerFactory紹介)-Part.4

6323 ワード

さらに、HttpApplicationインスタンスでは、リソースリクエストを処理するためにHandlerオブジェクトが必要です.HttpApplicationの主なタスクは、実際にリクエストを処理するクラスを見つけることです.HttpApplicationはまずHandlerオブジェクトを作成する工場を特定し、Machineで見てみましょう.configファイルのコンフィギュレーション領域で、コンフィギュレーションファイルにアプリケーションの具体的な処理クラスが登録されています.例えばMachine.config中対*.aspxの処理はSystemにマッピングする.Web.UI.PageHandlerFactoryクラス、対*.ashxの処理はSystemにマッピングされる.Web.UI.SimpleHandlerFactoryクラスです.この2つのクラスは、IhttpHandlerFactoryインタフェースに継承されている特定のクラスです.
<httpHandlers>
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" />
httpHandlers>

この構成領域は、リソース要求のタイプと処理要求のクラスとの間のマッピングセットを確立する.もし一つならaspxページが要求する、Systemが呼び出される.Web.UI.PageHandlerFactoryクラス、HttpApplicationはインタフェースIHttpHandlerFactoryのファクトリメソッドGetHandlerを呼び出してHandlerオブジェクトを作成します.sampleという名前になるとaspxのページから要求が出ると、PageHandlerFactoryでASPが戻る.SamplePage_aspxオブジェクト(具体的な製品)は、次の図に示されています.
IHttpHandlerFactory工場:
1public interface IHttpHandlerFactory
2{
3      // Methods
4      IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated);
5      void ReleaseHandler(IHttpHandler handler);
6}
7

IHttpHandlerFactory.GetHandlerはファクトリメソッドモデルの典型的な例であり、このアプリケーションでは、各ロールの設定は以下の通りである:抽象ファクトリロール:IHttpHandlerFactory具体的なファクトリロール:PageHandlerFactory抽象製品ロール:IHttpHandler具体的な製品ロール:ASP.SamplePage_aspxは、上記のことをさらに理解した後、特定のリソースタイプを処理するために工場クラスをカスタマイズすることができます.最初のステップでは、IHttpHandlerFactoryとIHttpHandlerの2つのインタフェースをそれぞれ実装する2つのクラスを作成する必要があります.
1public class HttpHandlerFactoryImpl:IHttpHandlerFactory {
2
3   IHttpHandler IHttpHandlerFactory.GetHandler(
4      HttpContext context, String requestType,
5      String url, String pathTranslated ) {
6
7         return new HttpHandlerImpl();
8
9   }//IHttpHandlerFactory.GetHandler
10
11   void IHttpHandlerFactory.ReleaseHandler(
12      IHttpHandler handler) { /**//*no-op*/ }
13
14}//HttpHandlerFactoryImpl
15
16public class HttpHandlerImpl:IHttpHandler {
17
18   void IHttpHandler.ProcessRequest(HttpContext context) {
19
20      context.Response.Write("sample handler invoked");
21
22   }//ProcessRequest
23
24   bool IHttpHandler.IsReusable { get { return false; } }
25
26}//HttpHandlerImpl
27

第2のステップでは、プロファイルにリソースリクエストタイプとプロセッサ間のマッピングを確立する必要があります.私たちは要求のタイプが*であることを望んでいます.sampleでは、次のようにカスタマイズされたプロセッサにアクセスします.
<httpHandlers>
<add verb="*" path="*.sample"
type="HttpHandlerFactoryImpl,SampleHandler" />
httpHandlers>

最後のステップはファイルを拡張する必要があります*sampleはASPにマッピングする.NET ISAPI拡張DLL(aspnet_isapi.dll)上.新しい拡張ファイルを処理するためのプロセッサを確立したので、この拡張子をIISに伝えてASPにマッピングする必要があります.NET.もしあなたがこのステップを実行しないで*にアクセスしようとしたら.Sampleファイル、IISはASPに渡すのではなく簡単にファイルに戻る.NET運転時.その結果、HTTPプロセッサは呼び出されません. 
Internetサービスマネージャを実行し、デフォルトのWebサイトを右クリックし、プロパティを選択してメインディレクトリオプションページに移動し、構成ボタンをクリックします.アプリケーション構成ダイアログが表示されます.追加ボタンをクリックし、実行可能フィールドにaspnet_を入力します.isapi.dllファイルパス、拡張フィールドに入力.sample.他のフィールドは処理されません.このダイアログボックスは次のとおりです.
大功を成し遂げる.