Asp.net Core 2.0部署本地IIS成功却报502.3错误,请求协助排查
我之前也碰到过一模一样的错误,结合你给出的详细错误信息——尤其是错误码0x80072ee2和涉及AspNetCoreModule的提示,大概率是IIS和ASP.NET Core后端进程的通信出了问题,或者部署环节有明显疏漏。给你一步步拆解排查的思路:
先修正最明显的物理路径错误
你当前设置的物理路径是C:\PublishedTestCoreWebApi\CoreWebApiTest1\api\values,这完全不对!IIS站点的物理路径必须指向你发布包的根目录,也就是C:\PublishedTestCoreWebApi\CoreWebApiTest1——因为IIS需要找到根目录下的web.config文件,才能通过AspNetCoreModule启动你的.NET Core应用。直接指向接口路径的话,IIS根本找不到启动入口,肯定会报错。检查ASP.NET Core Runtime是否正确安装
服务器上必须安装与你的项目目标框架匹配的ASP.NET Core Runtime(注意是Runtime,不是开发用的SDK)。你可以在服务器的命令行里执行:dotnet --list-runtimes看看输出里有没有对应版本的
Microsoft.AspNetCore.App条目。如果没有,下载对应版本的Runtime安装包,重启服务器后再试。验证web.config配置的正确性
打开发布目录下的web.config,重点检查<aspNetCore>节点:processPath:如果是框架依赖部署,应该是dotnet;如果是自包含部署,要指向你的exe文件路径。arguments:框架依赖的话是你的项目dll名称(比如CoreWebApiTest1.dll),注意路径格式要用相对路径(比如.\CoreWebApiTest1.dll)。hostingModel:如果你的项目是.NET Core 2.2及以上版本,可以用InProcess;如果版本较低或者启动有问题,改成OutOfProcess试试。
示例正确配置:
<aspNetCore processPath="dotnet" arguments=".\CoreWebApiTest1.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />检查应用程序池的关键设置
- 应用程序池的**.NET CLR版本必须设置为无托管代码**——因为ASP.NET Core是独立于IIS托管运行的,不需要IIS的.NET CLR环境。
- 权限检查:确保应用程序池的标识(比如默认的ApplicationPoolIdentity)对发布目录有读写权限。右键发布目录→属性→安全→添加
IIS AppPool\[你的应用池名称],给它分配读取和写入权限(尤其是要生成日志的话)。
启用stdout日志定位具体启动错误
把web.config里的stdoutLogEnabled改成true,然后手动创建logs文件夹(在发布根目录下)。重启站点后再次调用接口,去logs目录查看生成的日志文件,里面会详细记录你的ASP.NET Core应用启动时的报错——比如依赖缺失、配置文件错误、端口被占用等,这是排查这类问题最有效的方法。手动启动应用验证可用性
在服务器上打开命令行,切换到发布根目录,执行启动命令:dotnet CoreWebApiTest1.dll如果应用能正常启动并输出“Now listening on: http://xxx”之类的信息,说明应用本身没问题,问题出在IIS的配置或通信上;如果启动失败,命令行里会直接给出错误原因,照着修复即可。
内容的提问来源于stack exchange,提问作者MilkBottle

