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

.NET 5.0网站无法在IIS运行,报ANCM进程外启动失败

解决.NET 5.0站点IIS部署HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure问题

一、理清AspNetCoreModule与AspNetCoreModuleV2的适配问题

.NET 5+官方推荐使用AspNetCoreModuleV2,QA环境用旧模块能运行是因为AspNetCoreModule对部分.NET Core新版本有兼容,但生产环境必须切换到V2才能保证稳定运行,尤其是进程外托管模式。

检查并修改生产环境的web.config:

  1. 确保system.webServer/handlers节点中模块为AspNetCoreModuleV2:
<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
  1. 确认aspNetCore节点配置正确:
<aspNetCore processPath="dotnet" arguments=".\Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess">
</aspNetCore>

二、解决端口绑定异常问题

事件日志里的2230/9000端口是进程外模式下Kestrel的绑定端口,IIS作为反向代理转发请求到该端口,绑定失败的常见原因:

  • 端口被占用:用命令netstat -ano | findstr :2230和netstat -ano | findstr :9000检查端口占用情况,若有其他进程占用,结束对应进程即可。
  • Kestrel硬编码端口:检查项目的Program.cs或appsettings.json,如果存在UseUrls("http://localhost:xxxx")这类硬编码端口的代码,直接注释掉——进程外模式下,IIS会自动分配端口,无需手动指定。
  • 权限不足:应用程序池身份没有端口绑定权限,可临时将应用程序池身份改为LocalSystem测试,后续再调整为最小权限的专用账户。

三、验证.NET托管捆绑包的有效性

  1. 运行命令dotnet --list-runtimes,确认输出包含Microsoft.AspNetCore.App 5.0.x版本。
  2. 打开IIS管理器,查看应用程序池的.NET CLR版本,必须设置为无托管代码。
  3. 以管理员身份重新注册托管模块:执行%ProgramFiles%\dotnet\dotnet.exe aspnetcore-module-v2 register。

四、启用日志定位深层问题

开启stdout日志能获取更详细的启动失败信息:

  • 修改web.config中stdoutLogEnabled="true",确保stdoutLogFile指定的日志目录(如.\logs\stdout)已创建,且应用程序池身份有读写权限。
  • 访问站点后,查看日志文件,里面会记录具体的错误(比如依赖缺失、配置文件错误等)。

五、检查应用程序池核心配置

  • 确保应用程序池的托管管道模式为集成模式,.NET Core站点不支持经典模式。
  • 确认应用程序池没有启用32位应用程序(除非你的站点是32位编译的),避免与.NET 5的64位运行时冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 18:45:37