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

如何禁用IIS向ASPNET Core 1.1发送的应用终止功能?

如何禁用IIS发送的ASP.NET Core应用关闭信号

你观察得非常准确!那个POST /iisintegration请求确实是IIS的ASP.NET Core模块(ANCM)发送的应用关闭指令,目的是在应用池闲置或回收时终止.NET Core进程。要禁用这个自动关闭行为,你可以从以下几个层面入手:

1. 调整IIS应用池的核心设置

这是最根本的解决方式,从IIS层面阻止应用池触发回收或闲置终止:

  • 打开IIS管理器,定位到你的应用所属的应用池
  • 右键选择「高级设置」
  • 找到「闲置超时(分钟)」,将其设置为0(代表永不因闲置而关闭)
  • 同时检查「定期回收」下的「固定时间间隔(分钟)」,同样设为0,避免应用池定时自动回收

2. 配置ANCM的进程闲置超时

在应用的web.config文件中,修改aspNetCore节点,添加processIdleTimeout属性并设置为永不超时:

<aspNetCore processPath="dotnet" arguments=".\YourApp.dll" 
            stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
            processIdleTimeout="00:00:00" />

这个设置会告诉ANCM,不要因为进程闲置而发送关闭信号,和IIS应用池的闲置超时设置配合使用效果最佳。

3. 自定义中间件拦截关闭请求(备选方案)

如果上面的配置仍无法解决问题,你可以通过自定义中间件直接拦截POST /iisintegration请求,阻止它触发应用关闭逻辑。在Startup.cs的Configure方法中,添加这段中间件(要放在app.UseIISIntegration();之前):

using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;

// 在Configure方法中
app.Use(async (context, next) =>
{
    if (context.Request.Method == HttpMethods.Post && 
        context.Request.Path.Equals("/iisintegration"))
    {
        // 返回202状态码,但不执行应用关闭逻辑
        context.Response.StatusCode = StatusCodes.Status202Accepted;
        return;
    }
    await next();
});

// 原有的UseIISIntegration等中间件
app.UseIISIntegration();
// ...其他中间件配置

⚠️ 注意:这种方式属于“拦截式”的临时解决方案,不推荐作为首选方案,因为可能会忽略IIS的合法回收信号,导致应用池回收时进程无法正常退出。

额外建议

你的应用基于ASP.NET Core 1.1,这个版本已经停止维护很久了。如果条件允许,建议升级到.NET Core 3.1或更高的LTS版本,后续版本的ANCM在进程存活管理、性能稳定性上都有大幅优化,能减少这类问题的发生。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:11:23