You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET IIS应用回收首执行方法及部署后Application_Start不执行求助

问题1:基于.NET开发的IIS应用在回收时,第一个执行的方法是什么?

对于传统ASP.NET(非ASP.NET Core)的IIS应用,应用池回收完成后,第一个触发的方法是Global.asax中MvcApplication类的Application_Start。该方法在整个应用生命周期内仅执行一次,直到下一次应用回收或重启。

问题2:IIS部署新版本后Application_Start不执行,Quartz任务无法重新调度的解决方案

可能原因

IIS默认的重叠回收机制会让旧应用域持续处理请求,新应用域可能未完全初始化;或未配置预加载设置,导致新部署的应用未立即启动。

具体解决步骤

  1. 关闭应用池重叠回收

    • 打开IIS管理器,找到目标应用池,进入“高级设置”
    • 将“重叠回收”设置为False,确保旧应用域停止后再启动新应用域,保证Application_Start触发
  2. 启用应用程序初始化

    • 先通过服务器管理器安装“应用程序初始化”组件
    • 站点“高级设置”中开启“预加载已启用”
    • 在web.config中添加配置,强制重启后执行初始化:
    <system.webServer>
      <applicationInitialization doAppInitAfterRestart="true">
        <add initializationPage="/" />
      </applicationInitialization>
    </system.webServer>
    
  3. 兜底方案:用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;
                }
            }
        }
    }
    
  4. 验证排查

    • 部署后手动访问网站首页,强制触发应用初始化
    • 检查IIS应用池进程是否更新
    • 确认日志目录的读写权限(IIS进程权限不足会导致日志不写入,易误判方法未执行)

内容的提问来源于stack exchange,提问作者Sufyan Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 00:18:21