如何在ASP.NET中监听IIS关闭事件
我在我的ASP.NET静态变量中,每次X插入都会将自身刷新到DB。 问题是,如果我发布应用程序,IIS进程将被我的所有静态材料杀死。
如何保留它 – 或者如何在ASP.NET应用程序关闭后刷新它?
谢谢
Global.asax中
void Application_End(object sender, EventArgs e) { // SHUTDOWN CODE HERE }
依赖应用程序关闭事件来保持数据库更新是有风险的。 如果IIS重新启动,重新启动或停电,那么您将错过该事件。
如前所述,强烈建议不要让应用程序在Application_End
期间保留大数据,因为这可能在应用程序池关闭时触发,而不是在关闭开始时触发。 这里有更详细的解释(但仍然很简短)。
如果仍然希望捕获关闭应用程序池的所有不立即杀死它的情况,可以执行以下操作:
肮脏的方式
1)获取关闭时间限制 – IIS管理器 – >应用程序池 – > – >高级设置… – >过程模型组 – >关闭时间限制(秒)
2)在应用程序中创建一个线程/任务,运行时间是关闭时间限制的两倍,以确保可以捕获“关闭”状态。 这个post应该
i)检查应用程序池是否正在关闭
public bool IsShuttingDown() { return System.Web.Hosting.HostingEnvironment.ShutdownReason != ApplicationShutdownReason.None; }
ii)如果关闭,请做你的东西。 确保只执行一次
更正确的方法 (如此处所示)
1)创建一个实现IRegisteredObject
的类
public class HostingEnvironmentRegisteredObject : IRegisteredObject { // this is called both when shutting down starts and when it ends public void Stop(bool immediate) { if (immediate) return; // shutting down code here // there will about Shutting down time limit seconds to do the work } }
2)注册你的对象( Global.asax.cs
)
protected void Application_Start() { // other initialization code here HostingEnvironment.RegisterObject(new HostingEnvironmentRegisteredObject()); }
3)取消注册( 来源 )
首先调用Stop方法,并将immediate参数设置为false。 该对象可以完成处理,调用UnregisterObject方法,然后返回,也可以在调用UnregisterObject方法之前立即返回并异步完成处理。
如果在应用程序管理器的超时期限到期之前注册的对象未完成处理,则会立即将参数设置为true再次调用Stop方法。 当immediate参数为true时, 注册的对象必须在返回之前调用UnregisterObject方法; 否则,应用程序管理员将删除其注册。
作为旁注,我还将包含一些有关在ASP.NET Core 2.x中实现相同思想的细节。 这可以使用IApplicationLifetime接口执行。 示例(Startup.cs):
public void Configure(IApplicationLifetime lifetime) { var quartz = new JobScheduler(Kernel); lifetime.ApplicationStarted.Register(quartz.Start); lifetime.ApplicationStopping.Register(quartz.Stop); }
注意:这仅在IIS(可能是其他Web服务器)中托管时才有效,但在IISExpress中不会触发IApplicationLifetime
function。
您可能不会收到IIS正在关闭的任何通知。 想想如果IIS AppPool崩溃会发生什么,或者如果服务器失去电源将会发生什么。
您不能依赖听到关机事件。 如果IIS想要关闭,它不一定会通知您的应用程序。 我建议你重新思考你的写缓冲/缓存场景 – 只保留你可以承受丢失的数据。
上述就是C#学习教程:如何在ASP.NET中监听IIS关闭事件分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1022262.html