マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

HttpApplication?(Global.asax)、HttpModule?HttpHandler?等について。

ライフサイクルとイベント発生順序

ライフサイクル

HttpApplication?(Global.asax)、HttpModule?

  • 同時実行数に合わせてインスタンス化される。
  • リクエスト-レスポンス間は専有する(メンバはスレッドセーフ)。
  • インスタンス化されたオブジェクトは複数ユーザ間で使いまわされる。
  • なお、HttpApplication?HttpModule?はアクセスできるイベントが異なる。
  • HttpApplication?
    • アプリケーションレベルのイベント
    • リクエストレベルのイベント
  • HttpModule?
    • リクエストレベルのイベント

HttpHandler?

  • リクエストの都度、IHttpHandlerFactory?によって、HttpHandler?をインスタンス化される。
  • <httpHandlers>の定義に従って、拡張子やGET,POSTなどに応じて適切なHttpHandler?がインスタンス化される。

参考

イベント発生順序

★は初回のみ。

全体の初期処理

  • Global.Application_Start ★
  • IHTTPModule
    • Constructor ★
    • IHTTPModule.Init ★

リクエストの開始処理

  • BeginRequest?
    • Global.BeginRequest?
    • IHTTPModule.BeginRequest?
    • Global.Application_BeginRequest?
  • Global.DefaultAuthentication?
  • AuthenticateRequest?
    • Global.AuthenticateRequest?
    • IHTTPModule.AuthenticateRequest?
    • Global.Application_AuthenticateRequest?
  • PostAuthenticateRequest?
    • Global.PostAuthenticateRequest?
    • IHTTPModule.PostAuthenticateRequest?
  • AuthorizeRequest?
    • Global.AuthorizeRequest?
    • IHTTPModule.AuthorizeRequest?
  • PostAuthorizeRequest?
    • Global.PostAuthorizeRequest?
    • IHTTPModule.PostAuthorizeRequest?
  • ResolveRequestCache?
    • Global.ResolveRequestCache?
    • IHTTPModule.ResolveRequestCache?
  • PostResolveRequestCache?
    • Global.PostResolveRequestCache?
    • IHTTPModule.PostResolveRequestCache?
  • Page.Constructor
  • PostMapRequestHandler?
    • Global.PostMapRequestHandler?
    • IHTTPModule.PostMapRequestHandler?
  • Global.Session_Start ★
  • AcquireRequestState?
    • Global.AcquireRequestState?
    • IHTTPModule.AcquireRequestState?
  • PostAcquireRequestState?
    • Global.PostAcquireRequestState?
    • IHTTPModule.PostAcquireRequestState?
  • PreRequestHandlerExecute?
    • Global.PreRequestHandlerExecute?
    • IHTTPModule.PreRequestHandlerExecute?

ページの開始処理

  • Page.PreInit?
  • MasterPage?.Constructor
  • Init
    • MasterPage?.ContentPlaceHolder?
    • MasterPage?
    • Page
  • Page
    • InitComplete?
    • PreLoad?
  • Load
    • Page
    • MasterPage?
    • MasterPage?.ContentPlaceHolder?
  • Page
    • Page.LoadComplete?

ページの終了処理

  • PreRender?
    • Page
    • MasterPage?
    • MasterPage?.ContentPlaceHolder?
  • Page
    • PreRenderComplete?
    • SaveStateComplete?
  • Unload
    • MasterPage?.ContentPlaceHolder?
    • MasterPage?
    • Page

リクエストの終了処理

  • PostRequestHandlerExecute?
    • Global.PostRequestHandlerExecute?
    • IHTTPModule.PostRequestHandlerExecute?
  • ReleaseRequestState?
    • Global.ReleaseRequestState?
    • IHTTPModule.ReleaseRequestState?
  • PostReleaseRequestState?
    • Global.PostReleaseRequestState?
    • IHTTPModule.PostReleaseRequestState?
  • UpdateRequestCache?
    • Global.UpdateRequestCache?
    • IHTTPModule.UpdateRequestCache?
  • PostUpdateRequestCache?
    • Global.PostUpdateRequestCache?
    • IHTTPModule.PostUpdateRequestCache?
  • EndRequest?
    • Global.EndRequest?
    • IHTTPModule.EndRequest?
  • PreSendRequestHeaders?
    • Global.PreSendRequestHeaders?
    • IHTTPModule.PreSendRequestHeaders?
  • PreSendRequestContent?
    • Global.PreSendRequestContent?
    • IHTTPModule.PreSendRequestContent?

全体の終了処理

  • Global.Session_End ★
  • IHTTPModule.Dispose ★
  • Global.Application_End ★

主要なイベントの説明

#イベント説明
1BeginRequest?リクエストを受信して最初に発生
2AuthenticateRequest?ASP.NETがユーザの認証処理の準備が完了したときに発生
3PostAuthenticateRequest?Post
4AuthorizeRequest?権限の承認処理の準備が完了したときに発生
5PostAuthorizeRequest?Post
6ResolveRequestCache?リクエストに対してキャッシュからレスポンスを生成するのかレスポンスを1から生成するのかを決定する
7PostResolveRequestCache?Post
8PostMapRequestHandler?現在の要求を適切なイベント ハンドラにマップすると発生
9AcquireRequestState?セッション変数の準備処理
10PostAcquireRequestState?Post
11PreRequestHandlerExecute?各ハンドラ実行直前に発生
12PostRequestHandlerExecute?各ハンドラ実行直後に発生
13ReleaserequestState?セッション変数などの値を更新・保存する
14PostReleaseRequestState?Post
15UpdateRequestCache?リクエストキャッシュの更新処理を行う
16PostUpdateRequestCache?Post
17EndRequest?クライアントのブラウザへデータを送信する直前に発生
18PreSendRequestHeaders?HTTP ヘッダーをクライアントに送信する直前に発生
19PreSendRequestContent?コンテンツをクライアントに送信する直前に発生

参考

書き換え

  • URLの書き換えはHttpHandler?でも可能のようだが、
  • その他の書き換え処理は、要求パイプラインに
    モジュールを「プラグイン」できるHttpModule?を使うことが多い模様。

URL(Request)

URLの書き換えは、

  • HttpHandler?か、
  • 要求パイプライン中のApplication_BeginRequest?ハンドラで(HttpApplication?HttpModule?

行う。

ResponseBody?

ResponseBody?の書き換えは、HttpModule?でResponse.Filterにデコレートされた
ResponseStream?を設定することで行う(HttpApplication?HttpModule?)。

ResponseHeader?

ResponseHeader?の書き換えは、
要求パイプライン中のPreSendRequestHeaders?ハンドラで行う(HttpApplication?HttpModule?)。

参考


Tags: :.NET開発, :ASP.NET


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-01-30 (火) 20:15:36 (511d)