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

IIS自动关闭.NET Core API返回503服务不可用求助

.NET Core API部署IIS后频繁被主动关闭导致503服务不可用

核心问题

开发的.NET Core API在Kestrel独立运行时完全正常,但部署到IIS后仅能处理少量请求,随后返回「服务不可用(503)」。事件查看器显示应用启动后被IIS主动关闭,已尝试禁用应用池快速失败保护、配置目录权限、更换操作系统,问题仍存在。

应用日志仅显示启动后自动关闭:

info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: D:\IIS Root\RVGL API\
info: Microsoft.Hosting.Lifetime[0]
      Application is shutting down...

排查与解决方案

1. 检查应用池回收设置

IIS默认的回收机制可能导致应用被强制关闭:

  • 打开IIS管理器,定位到目标应用池 → 右键选择高级设置
  • 将**闲置超时(分钟)**改为0(永不超时)
  • 将**定期时间间隔(分钟)**改为0(关闭定期回收)
  • 取消勾选回收条件下的所有阈值选项(如内存、CPU限制)

2. 验证.NET Core托管捆绑包版本

确保服务器安装的托管捆绑包与API目标框架版本完全匹配:

  • 打开控制面板→程序和功能,查看已安装的.NET Core Hosting Bundle版本
  • 若版本不匹配(比如API是.NET 6,托管包是.NET 7),卸载现有包后重新安装对应版本的官方托管捆绑包
  • 安装完成后重启IIS服务

3. 开启详细日志捕获潜在错误

当前日志未记录关闭原因,需启用更精细的日志输出:

  • 在appsettings.Production.json中添加或修改日志配置:
    "Logging": {
      "LogLevel": {
        "Default": "Debug",
        "Microsoft.AspNetCore": "Debug",
        "Microsoft.Hosting.Lifetime": "Trace"
      }
    }
    
  • 重新部署API后触发请求,重点查看关闭前的异常信息(如数据库连接失败、JWT配置缺失、未捕获异常)

4. 检查应用池进程模型限制

内存/CPU限制可能导致IIS强制终止进程:

  • 进入应用池高级设置的进程模型区域
  • 将**私有内存限制(KB)和虚拟内存限制(KB)**均设为0(无限制)
  • 若使用ApplicationPoolIdentity,确保应用目录已授予该用户完全控制权限;测试阶段可临时改为LocalSystem排除权限问题

5. 查看系统日志获取IIS关闭原因

事件查看器的系统日志会明确记录应用池关闭的触发原因:

  • 打开事件查看器→Windows日志→系统
  • 筛选来源为IIS-W3SVC-WP的事件,重点关注Event ID为5009、5011的条目,这些会说明关闭的具体原因(如内存不足、进程崩溃、配置无效)

6. 修正Program.cs中的潜在问题

调整中间件顺序并修正Swagger配置:

  • 将UseCors移至UseAuthentication/UseAuthorization之前(符合最佳实践,排除潜在冲突)
  • 修正Swagger端点路径,确保与SwaggerDoc版本匹配:
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "RVGL Endpoints v1");
        c.SupportedSubmitMethods(new Swashbuckle.AspNetCore.SwaggerUI.SubmitMethod[] { });
    });
    

7. 调试IIS进程

通过Visual Studio附加进程实时捕获异常:

  • 打开Visual Studio,选择调试→附加到进程
  • 找到对应应用池的w3wp.exe进程并附加
  • 触发API请求,查看是否有未捕获的异常导致应用终止

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:56:05