.NET 8 Core Web API对应的IIS宿主模块及配置故障解决咨询
我此前用.NET Core 2.0开发的Web API在Windows Server 2022的IIS 10上运行,当时安装了AspNetCore 2.2 Hosting Bundle。因.NET Core 2.2停止支持,客户卸载了该宿主包并要求升级至.NET 8。我已安装.NET 8 Runtime及Hosting Bundle,但无论是原API还是新开发的.NET 8版本API均无法正常运行。
具体错误
- 点击网站的IIS身份验证或配置编辑器时,提示“执行操作时出错”;
- 访问API URL时出现
HTTP Error 500.19 - 内部服务器错误,提示页面相关配置数据无效; - 删除完整的
<system.webServer>节点后,上述操作错误消失,但访问URL时出现HTTP Error 503 - 服务不可用; - 事件查看器中无相关错误记录。
疑问
- .NET 8 Hosting Bundle是否包含AspNetCoreModuleV2的等效组件?
- 是否需要使用其他宿主模块名称?
- 如何解决当前问题?
关于.NET 8 Hosting Bundle的组件
.NET 8 Hosting Bundle包含AspNetCoreModuleV2的最新版本,它是.NET Core 2.x时代AspNetCoreModuleV2的延续,无需额外安装其他等效组件。
宿主模块名称说明
.NET 8中默认仍使用AspNetCoreModuleV2作为宿主模块名称,不需要更换其他名称,但要确保web.config里的配置正确引用它。
具体修复步骤
修正web.config配置
移除旧的.NET Core 2.x相关配置,替换为符合.NET 8规范的内容,示例如下:<system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\你的API程序集.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" /> </system.webServer>注意替换
你的API程序集.dll为实际的程序集文件名,若使用outofprocess托管模型,需对应调整配置。验证Hosting Bundle安装状态
- 打开控制面板→程序和功能,确认
Microsoft .NET 8.0.xx Windows Server Hosting已安装; - 打开IIS管理器,进入网站的模块列表,检查是否存在
AspNetCoreModuleV2,若缺失,关闭IIS后重新安装.NET 8 Hosting Bundle。
- 打开控制面板→程序和功能,确认
重新注册IIS模块
以管理员身份打开命令提示符,执行以下命令注册AspNetCoreModuleV2:%windir%\System32\inetsrv\appcmd.exe install module /name:AspNetCoreModuleV2 /image:"%ProgramFiles%\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll"执行完成后重启IIS:
iisreset检查应用程序池设置
- 确保应用程序池的**.NET CLR版本**设置为
无托管代码; - 确认应用程序池的运行身份拥有API文件目录的读写权限。
- 确保应用程序池的**.NET CLR版本**设置为
启用日志排查细节
在web.config的<aspNetCore>节点中设置stdoutLogEnabled="true",指定日志文件路径,运行API后查看日志文件,获取更具体的错误信息,定位问题根源。
内容的提问来源于stack exchange,提问作者Sri

