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

.NET Core7项目部署报错:HTTP Error502.5-ANCM进程外启动失败

问题排查:.NET Core 7 发布后出现 HTTP Error 502.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-->

排查与解决步骤

  1. 使用动态分配端口
    在Program.cs的ConfigureWebHostDefaults中配置动态端口,让系统自动分配未被占用的端口:

    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>()
                  .UseUrls("http://127.0.0.1:0");
    })
    

    也可以直接指定一个确定未被占用的端口(如5001)替代5000。

  2. 切换进程内托管模式
    如果服务商支持进程内托管,修改web.config的aspNetCore节点,添加hostingModel="InProcess":

    <aspNetCore processPath="dotnet" arguments=".\VoyagerPortfolio.Mvc.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    

    进程内模式下,ANCM直接托管应用,可避免端口绑定冲突。

  3. 通过环境变量强制指定端口
    在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>
    
  4. 确认服务器端口占用情况
    联系托管服务商,检查服务器上5000端口是否被其他进程占用,若无法释放则换用其他端口。

  5. 明确launchSettings.json的作用范围
    launchSettings.json仅在本地开发环境生效,发布到服务器后不会被读取,服务器端的端口配置需通过web.config或环境变量设置,无需依赖该文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:09:53