我们可以使用名称Application_End()从global.asax文件创建方法附加到此事件。但我需要像这样附加如何处理来自外部的Application_End事件global.asax
HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;
有没有办法做到这一点?
我们可以使用名称Application_End()从global.asax文件创建方法附加到此事件。但我需要像这样附加如何处理来自外部的Application_End事件global.asax
HttpContext.ApplicationInstance.ApplicationEnd+=OnApplicationEnd;
有没有办法做到这一点?
有这样解决了问题。
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 };
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)
{
}
已经试过。您只能从其他AppDomain处理DomainUnload事件,而不是从激发它的域中处理DomainUnload事件,因为它在卸载整个域数据后触发,并且不会调用事件处理程序。 – mironych 2011-05-24 14:16:37
我测试过了,它工作正常。 在处理程序处添加一个断点 运行网站 在web配置中添加一个空白区域并保存它以强制卸载它将被调用的appdomain – 2011-05-24 14:37:58
我知道答案已经给出,但想也包括这样:
[assembly: PreApplicationStartMethod(typeof(Bootstraper), "Start")]
[assembly: ApplicationShutdownMethod(typeof(Bootstraper), "End")]
public static class Bootstraper
{
public static void End()
{
...
}
public static void Start()
{
...
}
}
我在[MSDN](http:// msd)中看不到ApplicationEnd事件n.microsoft.com/en-us/library/system.web.httpapplication.aspx)。 – Amy 2011-05-24 14:03:10
你想从外部global.asax处理Application_End事件吗? – 2011-05-24 14:11:24