首页 > 解决方案 > 在 IIS 中启动 ASP.NET Core 3.1 站点

问题描述

我无法以预期的方式在 IIS (v10) 中启动我的 ASP.NET Core 3.1。我像往常一样将站点发布到文件夹,但是当我通过访问 http://localhost:80 或 https://localhost:443(IIS 站点都绑定到这两个站点)从我的 Windows Server 2019 VM 中进行测试时,我刚收到 500.19 回复。但是,如果从命令行输入dotnet MyWebApp.dll,则该站点确实出现在 https://localhost:5001/。

这是怎么回事?鉴于端口 80 绑定在 IIS 中,为什么端口 80 不能自动工作?

是否有一些技巧可以通过复制文件并使用 IIS 来完成这项工作,或者我是否需要使用命令行来启动 .NET Core 3.1 站点?

标签: asp.net-coreiis

解决方案


确保您已完成以下操作:

  • 安装了最新的核心托管包。如果没有,去这里寻找“Hosting Bundle” https://dotnet.microsoft.com/download/dotnet-core/3.1(你应该定期去那里,大约每个月一个新版本,最新的是 3.1.7写这篇的时候)
  • 在应用程序池中,确保选择.NET 框架

发布时,使用

Deployment Mode = Framework-Dependent
Target Runtime = win-x64

保存配置文件后,在您的发布配置文件(您在项目文件夹 /Properties/PublishProfiles/YourProfileName.pubxml 中找到此文件)中,您需要

<EnvironmentName>Production</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

InProcess 是使用 IIS 时最快的选项。运行发布时,这将最终出现在您生成的 web.config 中,如下所示

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath=".\YourWebApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
      <environmentVariables>
        <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Production" />
      </environmentVariables>
    </aspNetCore>
  </system.webServer>
</configuration>

部署到登台服务器时,创建一个新的发布配置文件,并使用

<EnvironmentName>Staging</EnvironmentName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

当您从 https://localhost:5001/ 获得答案时,您正在运行 Kestrel,而不是 IIS


推荐阅读