2011-05-24 50 views
1

我們可以使用名稱Application_End()從global.asax文件創建方法附加到此事件。但我需要像這樣附加如何處理來自外部的Application_End事件global.asax

HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd; 

有沒有辦法做到這一點?

+0

我在[MSDN](http:// msd)中看不到ApplicationEnd事件n.microsoft.com/en-us/library/system.web.httpapplication.aspx)。 – Amy 2011-05-24 14:03:10

+0

你想從外部global.asax處理Application_End事件嗎? – 2011-05-24 14:11:24

回答

4

有這樣解決了問題。

public class MyHttpApplication:HttpApplication 
    { 
     public event Action ApplicationEnd; 
     protected void Application_End() 
     { 
      if (ApplicationEnd != null) 
       ApplicationEnd(); 
     } 
    } 

在Global.asax中的代碼定義

<%@ Application Inherits="MyLib.MyHttpApplication" Language="C#" %> 

然後

var app = HttpContext.ApplicationInstance as MyHttpApplication; 
app.ApplicationEnd +=() => { // do something }; 
3

Application_End是一個特殊的「事件」,由Asp.net調用,不會記錄到HttpApplication類。

來自MSDN * Application_Start和Application_End方法是不代表HttpApplication事件的特殊方法。 ASP.NET稱他們一旦應用程序域的生命週期,而不是每一個HttpApplication實例。*

我認爲你可以有相同的行爲,並連接到處理器的AppDomain.DomainUnload事件

//your global.asax class contrauctor 
public GlobalApplication() 
     { 

      AppDomain.CurrentDomain.DomainUnload += ApplicationEnd; 
     } 


     private void ApplicationEnd(object sender, EventArgs e) 
     { 

     } 
+0

已經試過。您只能從其他AppDomain處理DomainUnload事件,而不是從激發它的域中處理DomainUnload事件,因爲它在卸載整個域數據後觸發,並且不會調用事件處理程序。 – mironych 2011-05-24 14:16:37

+0

我測試過了,它工作正常。 在處理程序處添加一個斷點 運行網站 在web配置中添加一個空白區域並保存它以強制卸載它將被調用的appdomain – 2011-05-24 14:37:58

0

我知道答案已經給出,但想也包括這樣:

[assembly: PreApplicationStartMethod(typeof(Bootstraper), "Start")] 
[assembly: ApplicationShutdownMethod(typeof(Bootstraper), "End")] 
public static class Bootstraper 
{ 
    public static void End() 
    { 
     ... 
    } 
    public static void Start() 
    { 
     ... 
    } 
} 
相關問題