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

IIS上ASP.NET Core长耗时API如何延长响应超时时间?

解决ASP.NET Core API部署IIS后长接口15秒返回503问题

以下是针对性的排查和配置步骤:

1. 配置ASP.NET Core模块请求超时

IIS托管ASP.NET Core时,ASP.NET Core模块(ANCM)有独立的请求超时设置,默认时长较短。需修改站点根目录的web.config,在<aspNetCore>节点添加requestTimeout参数:

<aspNetCore processPath="dotnet" arguments=".\YourApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" requestTimeout="00:10:00" />

requestTimeout格式为hh:mm:ss,根据实际任务时长设置(示例为10分钟)。

2. 调整IIS应用程序池关键参数

仅修改站点连接超时不够,需检查应用程序池的核心配置:

  • 打开IIS管理器,找到目标应用程序池 → 右键选择「高级设置」
  • 进程模型:
    • 「闲置超时(分钟)」:设为0(禁用闲置超时)或足够大的值,避免应用池被意外回收
    • 「请求限制→请求超时(秒)」:调大至任务所需时长,例如3600(1小时)
  • 队列长度:默认1000,若并发请求较多可适当调大,避免请求排队溢出触发503
  • 快速失败保护:暂时禁用或调大「失败次数阈值」,排除因进程意外崩溃导致的503(若后台进程正常运行,此步骤可作为验证手段)

3. 配置Kestrel服务器超时

ASP.NET Core内置的Kestrel服务器也有超时限制,需在Program.cs中明确配置:

builder.WebHost.ConfigureKestrel(options =>
{
    options.Limits.KeepAliveTimeout = TimeSpan.FromMinutes(10);
    options.Limits.RequestHeadersTimeout = TimeSpan.FromMinutes(10);
});

确保Kestrel不会提前断开长连接请求。

4. 排查反向代理/ARR超时(若存在)

如果API前端部署了ARR(应用程序请求路由)或其他反向代理,需同步调整其超时设置:

  • 打开IIS管理器 → 服务器节点 → 「应用程序请求路由」→ 「服务器代理设置」
  • 修改「超时(秒)」为足够大的值,同时检查「响应缓冲」是否开启,缓冲可能导致超时提前触发。

5. 优化长任务处理方式(可选)

若长任务无需同步返回结果,建议改为异步模式:

  • 接口立即返回202 Accepted状态码,告知客户端任务已接收
  • 通过后台任务处理逻辑完成后,再通过WebSocket、WebHook或轮询接口通知客户端结果,从根源避免超时问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:22:46