ASP.NETのちょっと内側

ASP.NET MVCソースコードを読むにあたっての事前調査メモ。



  • ISAPI(Internaet ServerApplication Programming Interface)
  • IISの機能拡張。

    asp.netもその1つ。

  • HttpApplicationクラス
  • リクエストに対する処理を行うクラス。最初のリクエストでインスタンスが生成され、1リクエスト毎に処理が行われる。(この辺りは設定で調整可能)

    HttpApplication継承クラスが存在する場合(Global.aspx)はそれが生成される。また処理の手順毎にイベントが発生する。このイベントを捕捉する場合、

    先ほどの継承クラスで対応を行う必要がある。



    ※参照

    ASP.NETアプリケーションのライフサイクルの概要

  • HTTPモジュール
  • HttpApplicationクラスの各イベント処理を拡張する。

    独自のHTTPモジュールを作成する場合は、IHttpModuleインターフェイス実装クラスを作成し、Web.configへ登録する。

    (拡張は、モジュールクラス内でHttpApplicationの各イベントハンドラを実装し、Init()を実装するときにそれらをイベントを接続することで可能。)

    モジュール例として、アクセスロギングクラスが考えられる。



    ※参照

    カスタムHTTPモジュールを作成する

  • HTTPハンドラ
  • 要求種類・拡張子に対応する応答処理クラス。最終的なレスポンスはハンドラクラスが生成している。

    最も身近なものは、*.aspxへの要求を処理するASP.NETページハンドラ。

    独自のHTTPハンドラを作成する場合は、IHttpHandlerインターフェイス実装クラスを作成し、Web.configとIISへ登録する。

    ASP.NET開発サーバーではページアクセス時に、web.configのhttpHandlersノード記述エラー(ハンドラのtypeがあいまい)が発生。動作しないっぽい。(VS2005,IIS5の場合)

    使いどころとしてはアクセスチェック処理が考えられる。(画像への直接アクセス禁止など。チェックNGの場合はエラーページへリダイレクト、成功時は実ページへリダイレクトする)直接応答を生成するということはあまり行わないと思われる。


    ※参照

    HTTP ハンドラの概要

    方法 : 同期 HTTP ハンドラを作成する


  • HTTPハンドラーファクトリ
  • 応答を適切なHTTPハンドラへ割り振るファクトリクラス。


    ※参照

    方法 : HTTP ハンドラ ファクトリを作成する