已配置IIS Express的idleTimeout未生效,如何解决?
我之前也踩过这个坑——明明改了applicationhost.config里的processModel节点的idleTimeout,结果系统还是在10分钟左右就回收闲置线程。下面是我亲测有效的解决步骤,专门针对IIS Express的场景:
先确认你改对了配置文件
IIS Express的配置文件不是系统全局的那个(比如C:\Windows\System32\inetsrv\config里的),而是和你的项目绑定的。常见的两个位置:- 如果你用Visual Studio开发,配置文件藏在项目根目录的
.vs\{你的项目名}\config文件夹里(.vs是隐藏文件夹,得先在文件管理器里开启显示隐藏项) - 要是直接用IIS Express命令行启动项目,全局配置文件在
%userprofile%\Documents\IISExpress\config,但多数情况下项目会优先用本地.vs里的配置,别搞错了。
- 如果你用Visual Studio开发,配置文件藏在项目根目录的
精准修改目标应用程序池的配置
找到正确的applicationhost.config后,定位到<system.applicationHost><applicationPools>节点下,找到你项目对应的应用程序池(名字一般和项目名一致),添加或修改processModel的idleTimeout:<add name="YourProjectAppPoolName"> <!-- 示例:设置为30分钟闲置超时 --> <processModel idleTimeout="00:30:00" /> </add>重点:必须确保这个配置是在你的项目专属应用程序池下面,而不是默认池,不然等于白改。如果原来没有
processModel节点,手动加进去就行。排查web.config的覆盖性配置
项目根目录的web.config里有些配置可能会干扰IIS Express的闲置回收逻辑,比如旧ASP.NET的<system.web><processModel>节点,或者<system.webServer><applicationInitialization>里的相关设置,确认这些地方没有设置更短的超时时间。重启后再验证
修改完配置后,一定要彻底关闭IIS Express(右键系统托盘里的IIS Express图标选「Exit」),再重启Visual Studio和项目——不重启的话,旧配置会一直生效。验证配置是否成功加载
可以用命令行确认:打开CMD,进入IIS Express安装目录(一般是C:\Program Files\IIS Express),运行:appcmd list apppools /config找到你的应用程序池,查看
idleTimeout的值是不是你设置的那个。
内容的提问来源于stack exchange,提问作者Mohsen Zahedi

