为何IIS中.NET Core应用池闲置超时后触发文件变更回收事件?
排查思路
- 检查.NET Core运行时的临时文件生成:.NET Core可能会在应用目录下生成编译视图、缓存类的临时文件,即便你禁用了普通用户写入权限,IIS应用池身份(如
IIS AppPool\SomePool)可能仍有权限操作这些临时文件(比如wwwroot子目录、obj/bin缓存区),这类变更会触发IIS的文件监控。可以用Process Monitor跟踪闲置超时前后应用池身份的文件操作,定位具体的变更文件。 - 调整IIS文件监控范围:IIS默认监控应用目录下所有文件及子目录,包括.NET Core的
appsettings.json、web.config,甚至运行时生成的.runtimeconfig.json临时文件。可以在应用池高级设置中开启禁止重叠回收,或在文件更改监控的排除列表中添加.NET Core临时文件路径(如**/obj/**、**/bin/**、**/.vs/**)。 - 切换.NET Core托管模式测试:如果当前是进程内托管(InProcess),.NET Core运行时与IIS工作进程共享进程,闲置超时关闭进程时,运行时的清理操作可能导致文件元数据(如最后访问时间)变化,触发IIS监控。切换为进程外托管(OutOfProcess),看问题是否复现。
- 核实应用池身份的权限细节:即便禁用了写入权限,应用池身份可能仍拥有修改文件属性的权限,这也会被IIS监控判定为文件变更。在文件管理器安全选项卡中,确保应用池身份仅拥有读取和执行权限,移除修改、写入权限。
- 查看事件日志的详细触发源:在事件查看器中找到“检测到应用目录文件变更”的事件,查看其XML详细内容,里面会明确标注触发变更的具体文件路径,根据路径直接排查根源。
- 排查第三方工具的目录扫描:杀毒软件、备份工具、文件同步服务等可能会在闲置超时前后访问或修改应用目录文件,触发IIS监控。可临时关闭这类工具测试问题是否消失。
内容的提问来源于stack exchange,提问作者spartaneg
相关产品推荐
相关产品推荐

