You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 10 IIS部署.NET应用:AspNetCoreModuleV2无法启动,命令行正常

排查AspNetCoreModuleV2无法启动IIS托管.NET应用的问题

从你的描述来看,命令行能正常跑但IIS托管就失败,连增强日志都没线索,咱们可以从这几个方向逐步挖问题:

1. 先解决进程内模式和反向代理的冲突

你的web.config里同时配置了AspNetCoreModuleV2inprocess进程内托管,又加了反向代理指向http://escompdata:5000,这俩逻辑根本矛盾:

  • 进程内模式下,ASP.NET Core是直接跑在IIS worker进程里的,完全不需要反向代理到外部Kestrel端口
  • 反向代理规则会把请求转发到外部Kestrel进程,但此时IIS又在尝试启动进程内的应用,两边互相干扰

调整方案

  • 先把<rewrite>节点的反向代理规则删掉,进程内模式不需要这玩意儿
  • 如果确实需要用反向代理(比如要切换到进程外模式),把hostingModel改成outofprocess,同时确保应用启动时监听5000端口(或者你指定的其他端口)

2. 确认stdout日志路径的权限

你开了stdout日志但没看到内容?大概率是IIS应用池账号没权限写这个路径:

  • 手动在网站根目录建个logs文件夹
  • 给应用池用的管理员账号(或者IIS_IUSRS、AppPoolIdentity)加这个文件夹的完全控制权限
  • 重启网站后去logs里看看,stdout日志里一般会写死启动时的具体错误

3. 重新注册AspNetCoreModuleV2模块

有时候模块没正确注册到IIS,也会导致启动失败:

  • 管理员身份开命令提示符,跑这几个命令重新注册:
    "%ProgramFiles%\dotnet\dotnet.exe" aspnetcore-module-v2 register
    iisreset
    
  • 注册完重启IIS服务再试

4. 核对web.config里的路径是否绝对正确

虽然命令行能跑,但要确认web.config里的路径没写错:

  • 检查arguments里的c:\escompdata2\ESTemplateCompData.dll是不是真的存在
  • stdoutLogFile改成绝对路径试试(比如c:\escompdata2\logs\stdout),避免相对路径解析出问题

5. 切换到进程外模式测试

既然进程内模式有问题,先切到进程外模式验证:

  • 修改web.config里的hostingModeloutofprocess
  • 确保应用的Program.cs里配置了Kestrel监听端口(比如builder.WebHost.UseUrls("http://*:5000");
  • 重启网站,看能不能正常访问

6. 去系统事件查看器找线索

IIS和ASP.NET Core的启动错误经常会藏在事件查看器里:

  • 打开事件查看器,导航到Windows日志 > 应用程序
  • 找来源为ASP.NET CoreIIS AspNetCoreModuleV2的错误事件,里面会有更详细的异常堆栈

按这个顺序排查,应该能揪出问题所在。

内容的提问来源于stack exchange,提问作者Marc-Arthur

火山引擎 最新活动