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

.NET Core 5 API部署IIS遇HTTP Error 500.30启动失败及CMD启动无法接收请求问题求助

解决.NET Core 5 API IIS启动500.30错误及自托管无法处理请求的问题

从你给出的事件日志里,已经能直接定位到核心问题:

System.InvalidOperationException: Application is running inside IIS process but is not configured to use IIS server.

这个异常说明你的应用在IIS进程内运行时,没有正确配置为使用IIS集成服务器,同时自托管启动无法处理请求的问题也和配置不当有关。下面是具体的修复方案:

一、修复Program.cs的配置问题

你的CreateHostBuilder方法存在两个关键问题:显式指定UseKestrel()导致IIS托管冲突,以及注释了必要的UseContentRoot配置,还错误地在Builder内部注释了Build()(这应该是Main方法的职责)。

修改后的Program.cs代码如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder
                .UseNLog()
                .UseContentRoot(Directory.GetCurrentDirectory()) // 恢复这个配置,确保内容根目录正确
                .UseIISIntegration()
                .UseStartup<Startup>();
        });

// 确保Main方法正确完成启动流程
public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}

为什么这样改?

  • 移除UseKestrel()ConfigureWebHostDefaults会自动根据托管环境选择服务器——IIS托管时自动使用IIS服务器,自托管(dotnet <service-name>.dll)时自动启用Kestrel,强制指定会导致IIS托管时的冲突。
  • 恢复UseContentRoot:IIS托管和自托管都需要正确的内容根目录来读取配置文件、静态资源等,注释掉会导致应用无法找到必要文件,引发启动或请求处理失败。
  • 不在Builder内调用Build()CreateHostBuilder的职责是构建Host配置,Build()Run()应该放在Main方法中执行,这是ASP.NET Core的标准启动流程。

二、解决自托管无法处理请求的问题

修复配置后,自托管时Kestrel会默认监听http://localhost:5000https://localhost:5001端口。如果还是无法处理请求,可以尝试:

  1. 启动时通过命令行指定端口:
    dotnet <service-name>.dll --urls=http://localhost:5000
    
  2. appsettings.json中配置Kestrel端点:
    "Kestrel": {
      "Endpoints": {
        "Http": {
          "Url": "http://localhost:5000"
        }
      }
    }
    
  3. 确保服务器防火墙允许5000/5001端口的入站请求。

三、额外验证步骤

  1. 检查IIS应用池设置:确保应用池的.NET CLR版本设置为无托管代码,因为ASP.NET Core应用是自托管模式,不需要IIS的托管CLR。
  2. 确认运行时版本:服务器上必须安装ASP.NET Core Runtime 5.0.7或更高兼容版本,否则应用无法正常启动。
  3. 重启IIS站点:修改配置并重新发布后,重启IIS站点以确保配置生效。

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

火山引擎 最新活动