在IIS 6中,转到 Application Pools 部分,然后在托管相关 ASP.NET 应用程序的池上右键单击 > Properties。转到性能选项卡并取消选中“空闲后关闭工作进程:”
在IIS 7中,转到“连接”窗格并找到“应用程序池”,然后为托管应用程序的池选择“高级设置”。找到“空闲超时”属性并将其设置为“0”(这将禁用它)。
默认值为 20 分钟不活动。通过取消选中该框,一旦您的AppDomain被工作进程加载,它将永远不会死亡(除非您杀死进程或其他东西)。默认情况下,IIS 会在进程达到某个限制(例如内存上限)时回收该进程,但它也会启动一个新进程并“逐步处理”所有传入请求,直到旧请求未被使用,以最大程度地减少中断。
我还编写了一个小的 c# 类,它可以让您的 ASP.NET 应用程序在正常情况下保持活跃(备用存档版本)。由于它在应用程序中运行,显然它不能阻止 IIS 或其他任何东西显式杀死进程,但它会保持应用程序“热”,例如应用程序永远不会空闲足够长的时间让 IIS 决定关闭它.
如果您无法直接控制您的 IIS 配置(例如共享主机),那么最好的办法是让一个小型应用程序在单独的系统上运行 - 例如,永远在线的工作站 - 每 x 分钟访问您的站点以保持应用程序池超时。没什么特别的——一个简单的WebRequest和一个控制台应用程序中的 while() 循环就可以了。