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

如何终止IIS 10.0工作进程中的孤立请求?

解决IIS 10.0终止孤立请求的方案

当用户关闭浏览器后,IIS默认不会主动终止已启动的请求,以下是几种可行的解决方法:

一、代码层面检测客户端连接状态

在业务代码中定期检查客户端是否仍保持连接,若已断开则终止请求处理:

  • 对于传统ASP.NET项目,使用HttpContext.IsClientConnected属性:
foreach (var item in largeDataCollection)
{
    // 每次循环前检查客户端连接状态
    if (!HttpContext.Current.IsClientConnected)
    {
        HttpContext.Current.Response.CompleteRequest();
        return;
    }
    // 执行耗时业务操作
}

注意:Response.End()会抛出ThreadAbortException,推荐用CompleteRequest()更优雅,但需确保后续代码不再执行。

  • 对于ASP.NET Core项目,利用CancellationToken检测客户端取消信号:
public async Task<IActionResult> LongRunningTask(CancellationToken cancellationToken)
{
    foreach (var item in largeDataCollection)
    {
        // 检测客户端是否已取消请求
        cancellationToken.ThrowIfCancellationRequested();
        // 执行耗时业务操作
        await Task.Delay(100, cancellationToken);
    }
    return Ok();
}

二、配置IIS原生超时规则

通过IIS管理器调整连接和请求超时,主动终止无响应的请求:

  • 网站连接超时:
    1. 打开IIS管理器,选中目标网站 → 功能视图 → 高级设置
    2. 修改「连接超时」(默认120秒),缩短该值让IIS主动断开长时间无交互的连接
  • 请求筛选超时:
    1. 网站 → 请求筛选 → 编辑功能设置
    2. 设置「请求超时」(单位:秒),超过该时间的请求会被IIS强制终止

三、手动终止孤立请求(紧急场景)

如果需要临时处理已存在的孤立请求:

  • 图形化操作:IIS管理器 → 应用池 → 选中目标池 → 查看工作进程 → 右键进程 → 查看当前请求 → 选中目标请求点击「终止请求」
  • 命令行操作:使用appcmd工具:
# 列出目标应用池的所有请求
appcmd list requests /apppool:"你的应用池名称"

# 根据请求ID终止请求
appcmd stop request /request.id:"XXXX"

注意事项

  • 缩短超时时间需结合业务场景,避免误杀正常的长耗时请求(如大文件导出)
  • 部分非托管代码或无法中断的操作,可能无法通过上述方法终止,需优化业务逻辑拆分长任务

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:07:57