HttpApplication インスタンスの使用

アプリケーションの有効期間中、ASP.NET は、Global.asax から派生した HttpApplication インスタンスのプールを維持します。アプリケーションが HTTP 要求を受信すると、ASP.NET ページ フレームワークは、これらのインスタンスの 1 つを割り当てて要求を処理します。その特定の HttpApplication インスタンスは、割り当てられた要求の有効期間を管理します。この要求が完了するまで、同じインスタンスの再利用はできません。

プログラムから HttpApplication.Init メソッド、HttpApplication.Dispose メソッド、Application_OnStart イベント、および Application_OnEnd イベントにアクセスするには、HttpApplication クラスを使用します。また、HttpModule によって公開されるすべてのイベントにもアクセスできます。

Init メソッドと Dispose メソッドのオーバーライド

HttpApplication クラスのインスタンスを作成したら、その直後に HttpApplication.Init メソッドを呼び出します。次の例に示すように、このメソッドは、すべての処理イベントで共通に使用するオブジェクトを作成し、構成するために使用できます。

<script language="VB" runat="server">
      Public Overrides Sub Init()
         'Insert something interesting here.
      End Sub
</script>
[C#]
<script language="C#" runat="server">
      public override void Init() {
         // Insert something interesting here.
      }
</script>

Init メソッドは、アプリケーション内のすべての HttpApplication インスタンスで必ず呼び出されるという点で、Application_OnStart イベントとは異なります。Application_OnStart は、アプリケーションの有効期間中に 1 回だけ、HttpApplication の最初のインスタンスで発生します。Application_OnStart は、ApplicationState オブジェクトを使用する場合など、すべてのパイプライン インスタンスで共有される状態を作成または変更する場合にのみ使います。このイベントを使用してローカル変数を作成しないでください。これは、ローカル変数は複数の HttpApplication インスタンスによって共有されないためです。HttpApplication クラスのインスタンスを破棄する直前には、HttpApplication.Dispose メソッドを呼び出します。このメソッドは、ローカル リソースをクリーンアップするために使用できます。

Dispose メソッドは、アプリケーション内のすべての HttpApplication インスタンスで必ず呼び出されるという点で、Application_OnEnd イベントとは異なります。Application_OnEnd は、アプリケーションの有効期間中に 1 回だけ、最後に破棄される HttpApplication インスタンスで発生します。Application_OnEnd は、ApplicationState オブジェクトを使用した場合など、すべてのパイプライン インスタンスで共有される状態またはリソースをクリーンアップする場合にのみ使います。このイベントを使用してローカル変数をクリーンアップしないでください。これは、ローカル変数は複数の HttpApplication インスタンスによって共有されないためです。

要求実行の Init 段階または Dispose 段階では、HttpApplication インスタンスの RequestResponse、および Session プロパティは使用できません。

HttpApplication 基本クラスの 2 つのライフサイクル メソッドをオーバーライドする方法を次の例に示します。

<script language="VB" runat=server>
   Public Overrides Sub Init()
      ' Init override code goes here.
   End Sub
   Public Overrides Sub Dispose()
      ' Init override code goes here.
   End Sub
</script>
[C#]
<script language="C#" runat=server>
   public override void Init() {
      // Init override code goes here.
   }
   public override void Dispose() {
      // Init override code goes here.
   }
</script>

HttpApplication イベントの処理

Global.asax ファイルを使用して、HttpApplication 基本クラスにより公開されているイベントの同期をとることができます。そのためには、メソッドを作成するときに次の名前付けパターンを使用する必要があります。

Application_EventName(AppropriateEventArgumentSignature)

たとえば、アプリケーションの OnStartBeginRequest、および OnEnd の各イベントに応答するコードが必要な場合は、Global.asax ファイルに次のようなコードを記述します。

<Script language="VB" runat="server">
     Sub Application_OnStart()
         'Application start-up code goes here.
     End Sub
     Sub Application_BeginRequest()
         'Application code for each request could go here.
     End Sub
     Sub Application_OnEnd()
         'Application clean-up code goes here.
     End Sub
</script>
[C#]
<Script language="C#" runat="server">
     public void Application_OnStart() {
         // Application start-up code goes here.
     }
     public void Application_BeginRequest() {
         // Application code for each request could go here.
     }
     public void Application_OnEnd() {
         // Application clean-up code goes here.
     }
</script>

参照

Global.asax ファイル | HttpApplication クラス | Init メソッド | Dispose メソッド