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

OWIN启动完成后立即自动关闭,请问该现象的原因是什么?

问题:启动完成后应用立即关闭的原因

简化后的Startup代码

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        RegisterOnShutdown(app);
        Log.Debug("\n   Startup end !!!");
    }

    private void RegisterOnShutdown(IAppBuilder app)
    {
        var context = new OwinContext(app.Properties);
        var token = context.Get<CancellationToken>("host.OnAppDisposing");
        if (token != CancellationToken.None)
        {
            token.Register(OnShutdown);
        }
    }

    private void OnShutdown()
    {
        Log.Debug("\n   Shutdown !!!");
    }
}

日志输出

2022-12-11 08:00:27,045 [1] DEBUG (null) Web.Startup [(null)] <(null)> - 
   Startup end !!!
2022-12-11 08:00:29,751 [7] DEBUG (null) Web.Startup [(null)] <(null)> - 
   Shutdown !!!

原因分析

这种启动后立即关闭的现象,最常见的原因是OWIN宿主进程没有被保持活跃状态。你的Startup代码本身没有问题,但如果宿主(比如控制台宿主)在启动应用后没有阻塞主线程,进程就会直接退出,触发host.OnAppDisposing令牌,从而执行你的OnShutdown方法。

比如,如果你的宿主启动代码是这样的,就会导致进程直接退出:

using (WebApp.Start<Startup>("http://localhost:8080"))
{
    // 无任何阻塞逻辑,程序执行到此处直接结束using块,释放宿主
}

解决办法是在启动宿主后添加阻塞逻辑,比如控制台应用里加入Console.ReadLine()来保持主线程运行:

using (WebApp.Start<Startup>("http://localhost:8080"))
{
    Console.WriteLine("应用已启动,按任意键退出...");
    Console.ReadLine();
}

其他可能的次要原因包括:

  • 宿主配置错误,比如未正确绑定端口或缺少必要的宿主依赖
  • IIS应用池的回收策略被错误配置,但从日志的时间间隔来看,更可能是控制台宿主未保持活跃的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:00:49