使用 HttpApplication 執行個體

在您應用程式的存留期 (Lifetime) 期間,ASP.NET 會維護 Global.asax 衍生的 HttpApplication 執行個體 (Instance) 集區。當您的應用程式收到 HTTP 要求時,ASP.NET 網頁架構會指派這些執行個體其中之一來處理那個要求。那個特定 HttpApplication 執行個體將負責管理指派給它的要求之整個存留期,而執行個體只可以在要求已完成之後重複使用。

透過 HttpApplication 類別,您能夠以程式設計方式存取 HttpApplication.InitHttpApplication.Dispose 方法,以及 Application_OnStartApplication_OnEnd 事件。您也可以存取由任何 HttpModule 所公開 (Expose) 的任何事件。

覆寫 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 方法不同於 Application_OnStart 事件,因為它一定會在應用程式內所有 HttpApplication 執行個體上被叫用。應用程式存留期期間只會在 HttpApplication 的第一個執行個體上引發 Application_OnStart 一次。只能使用 Application_OnStart 來建立或修改所有管線執行個體所共用的狀態,例如 ApplicationState 物件的使用。不要用它來建立區域變數,因為區域變數不為多個 HttpApplication 執行個體所共用。在摧毀 HttpApplication 類別的執行個體之前要立即叫用 HttpApplication.Dispose 方法。您可以用它來清除任何區域資源。

Dispose 方法不同於 Application_OnEnd 事件,因為它一定會在應用程式內所有 HttpApplication 執行個體上被叫用。應用程式存留期期間只會在要被拆除的 HttpApplication 的最後執行個體上引發 Application_OnEnd 一次。只能使用 Application_OnEnd 來清除所有管線執行個體所共用的狀態或資源,例如 ApplicationState 物件的使用。不要用它來清除區域變數,因為區域變數不為多個 HttpApplication 執行個體所共用。

您不可以在要求執行的 Init 或者 Dispose 階段期間使用 HttpApplication 執行個體的 RequestResponseSession 屬性。

下列範例示範您如何覆寫 HttpApplication 基底類別所提供的兩個存留週期方法:

<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)

例如,如果您想要會回應應用程式的 OnStartBeginRequestOnEnd 事件的程式碼,則您包含於 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 類別 | HttpApplication.Init | HttpApplication.Dispose