.NET IIS应用回收首执行方法及部署后Application_Start不执行求助
问题1:基于.NET开发的IIS应用在回收时,第一个执行的方法是什么?
对于传统ASP.NET(非ASP.NET Core)的IIS应用,应用池回收完成后,第一个触发的方法是Global.asax中MvcApplication类的Application_Start。该方法在整个应用生命周期内仅执行一次,直到下一次应用回收或重启。
问题2:IIS部署新版本后
Application_Start不执行,Quartz任务无法重新调度的解决方案 可能原因
IIS默认的重叠回收机制会让旧应用域持续处理请求,新应用域可能未完全初始化;或未配置预加载设置,导致新部署的应用未立即启动。
具体解决步骤
关闭应用池重叠回收
- 打开IIS管理器,找到目标应用池,进入“高级设置”
- 将“重叠回收”设置为
False,确保旧应用域停止后再启动新应用域,保证Application_Start触发
启用应用程序初始化
- 先通过服务器管理器安装“应用程序初始化”组件
- 站点“高级设置”中开启“预加载已启用”
- 在
web.config中添加配置,强制重启后执行初始化:
<system.webServer> <applicationInitialization doAppInitAfterRestart="true"> <add initializationPage="/" /> </applicationInitialization> </system.webServer>兜底方案:用
Application_BeginRequest确保任务调度
如果Application_Start仍未触发,可在Global.asax中添加如下代码,通过请求触发初始化(需加锁避免重复执行):private static bool _jobsScheduled = false; private static readonly object _lock = new object(); protected void Application_BeginRequest() { if (!_jobsScheduled) { lock (_lock) { if (!_jobsScheduled) { LoggingAndCount_Common.InsertAuditLog("App Started via BeginRequest", "MvcApplication", "Application_BeginRequest", "taskscheduler"); CustomScheduler.ScheduleAllJobs(); FileAndFolder_Common.CreateBasicDirectories_WithinApplication(); _jobsScheduled = true; } } } }验证排查
- 部署后手动访问网站首页,强制触发应用初始化
- 检查IIS应用池进程是否更新
- 确认日志目录的读写权限(IIS进程权限不足会导致日志不写入,易误判方法未执行)
内容的提问来源于stack exchange,提问作者Sufyan Khan
相关产品推荐
相关产品推荐

