asp.net-core - 在 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 站点?
解决方案
确保您已完成以下操作:
- 安装了最新的核心托管包。如果没有,去这里寻找“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
推荐阅读
- database - d = 3 且高度 = 3 的最大满 B+ 树可以保存多少条记录?
- mysql - 如何在没有主键的情况下唯一标识 MySQL 表中的所有行?
- html - Carousel Bootstrap - 如何缩小 img-wrapper 的宽度?
- javascript - Javascript根据行数将存储在字符串中的长文件拆分为字符串数组
- php - maxScore 返回为 NaN
- php - 使用 array_push 将几个一维数组附加到一个一维数组
- r - 在ggplot中计算中位数的置信区间
- javascript - 如何控制数字发生器
- jquery - 只有一个 jquery ajax 帖子在 Firefox 中不起作用
- windows - 如何避免“让 Windows 尝试修复应用程序使其不模糊”影响我的应用程序?