.NET Core7项目部署报错:HTTP Error502.5-ANCM进程外启动失败
问题描述
将基于.NET Core 7开发的项目发布到Web托管服务器后,遇到「HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure」错误,日志显示异常:
Unhandled exception. System.IO.IOException: Failed to bind to address http://127.0.0.1:5000: address already in use.
已按托管服务商要求配置launchSettings.json,但问题仍未解决。
相关代码
Program.cs
public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((hostingContext, config) => { config.Sources.Clear(); var env = hostingContext.HostingEnvironment; config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true); config.AddEnvironmentVariables(); if (args != null) { config.AddCommandLine(args); } }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }).ConfigureLogging(logging => { logging.ClearProviders(); });
web.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="false"> <system.webServer> <handlers> <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /> </handlers> <aspNetCore processPath="dotnet" arguments=".\VoyagerPortfolio.Mvc.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" /> </system.webServer> </location> </configuration> <!--ProjectGuid: b9bce31e-fe26-4a19-88b7-2a46b76f9a49-->
排查与解决步骤
使用动态分配端口
在Program.cs的ConfigureWebHostDefaults中配置动态端口,让系统自动分配未被占用的端口:.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() .UseUrls("http://127.0.0.1:0"); })也可以直接指定一个确定未被占用的端口(如5001)替代5000。
切换进程内托管模式
如果服务商支持进程内托管,修改web.config的aspNetCore节点,添加hostingModel="InProcess":<aspNetCore processPath="dotnet" arguments=".\VoyagerPortfolio.Mvc.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />进程内模式下,ANCM直接托管应用,可避免端口绑定冲突。
通过环境变量强制指定端口
在web.config中添加环境变量配置,覆盖端口设置:<aspNetCore processPath="dotnet" arguments=".\VoyagerPortfolio.Mvc.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"> <environmentVariables> <environmentVariable name="ASPNETCORE_URLS" value="http://127.0.0.1:0" /> </environmentVariables> </aspNetCore>确认服务器端口占用情况
联系托管服务商,检查服务器上5000端口是否被其他进程占用,若无法释放则换用其他端口。明确launchSettings.json的作用范围
launchSettings.json仅在本地开发环境生效,发布到服务器后不会被读取,服务器端的端口配置需通过web.config或环境变量设置,无需依赖该文件。
内容的提问来源于stack exchange,提问作者CNone

