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

IIS 6.1搭建永不回收停止的ASP.NET网站(含Hangfire后台任务)

针对IIS 6.1 ASP.NET网站永不回收/停止的解决方案

我之前在维护IIS 6.1上的ASP.NET站点时也碰到过类似的硬需求,刚好可以分享一下可行的方案:

一、先明确:IIS 6.1没有绝对的"永不停止"内置开关,但可以最大化减少回收

虽然没有一键实现的内置功能,但通过关闭所有触发回收的配置项,能把回收概率降到极低:

1. 彻底关闭应用程序池的回收规则

打开IIS管理器,找到你的目标应用程序池 → 右键属性 → 切换到回收标签页:

  • 取消勾选所有回收触发项:包括按时间、请求数、虚拟内存、私有内存、特定时间回收的选项
  • 确保没有任何规则会触发IIS主动回收进程

2. 禁用闲置超时,避免因无请求被回收

切换到性能标签页:

  • 取消勾选"闲置超时(分钟)",或者把数值设为0(代表永不超时),这样IIS不会因为网站长时间没收到请求就杀掉进程

3. 关闭快速失败保护,避免异常导致回收

切换到健康标签页:

  • 取消勾选"启用快速失败保护",防止网站短时间内出现几次错误就被IIS强制回收

4. 进程模型配置优化

切换到进程模型标签页:

  • 把"空闲超时(分钟)"设为0
  • "最大工作进程数"设为1,避免多进程模式下的回收切换问题
  • 确保"身份"使用的账户有足够权限,不会因权限问题导致进程意外终止

二、你的定时任务方案的优化建议

即使做了上面的配置,极端情况(比如系统资源耗尽、未处理异常崩溃)还是可能导致进程停止,你的定时任务方案是很好的补充,这里给几个优化点:

  • 不要直接调用函数,发起真实HTTP请求
    用PowerShell或者wget工具定时访问网站的一个简单存活检测页面(比如专门写个KeepAlive.aspx,只返回200状态码),这样更符合IIS的活跃判定逻辑。示例PowerShell命令:
    Invoke-WebRequest -Uri "http://你的站点域名/KeepAlive.aspx" -UseBasicParsing
    
  • 设置合理的定时频率
    建议每5分钟执行一次(比IIS默认的20分钟闲置超时短),确保IIS始终认为网站处于活跃状态。如果担心资源占用,也可以设为15分钟一次,但必须小于你设置的闲置超时时间。
  • 增加失败处理逻辑
    在定时任务里加简单的判断:如果请求返回非200状态码,尝试用命令行重启应用程序池(需要定时任务账户有IIS管理权限):
    appcmd recycle apppool /apppool.name:"你的应用程序池名称"
    

三、ASP.NET代码层面的额外优化

在网站的web.config里添加配置,进一步减少ASP.NET自身触发的应用域重启:

<system.web>
  <processModel 
    enable="true" 
    timeout="Infinite" 
    idleTimeout="Infinite" 
    requestLimit="Infinite" 
    memoryLimit="10000" />
</system.web>

这里把进程运行时间、闲置时间、请求数都设为无限,内存限制设为一个极大值,避免ASP.NET因自身规则触发回收。另外,要注意不要修改web.config、bin目录文件、App_Code代码,这些操作会直接触发应用域重启。

总结

IIS 6.1没有能保证100%永不停止的内置功能,但通过上述IIS配置+定时任务的组合,再配合ASP.NET层面的优化,已经能最大限度接近"一秒都不能下线"的需求,我之前用这套方案维护的站点,连续几个月都没有出现意外下线的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:25:48