.NET Core 托管到 IIS,我收到 HTTP 错误 500.30 - ANCM 进程内启动失败

Posted

技术标签:

【中文标题】.NET Core 托管到 IIS,我收到 HTTP 错误 500.30 - ANCM 进程内启动失败【英文标题】:.NET Core hosting to IIS, I get HTTP Error 500.30 - ANCM In-Process Start Failure 【发布时间】:2020-10-11 06:06:19 【问题描述】:

将 .NET Core 部署到 IIS 时出现问题。 我按照以下步骤操作:

    使用 .NET Core 3.1 和 Visual Studio 创建了一个网站 在 IIS 中创建了网站(指向一个空的物理路径 C:\inetpub\mywebsite 和地址 mywebsite.core.com) 将我的网站从 Visual Studio 发布到同一文件夹 C:\inetpub\mywebsite 从浏览器浏览的主机条目,例如去驱动程序\等\主机并添加行 127.0.0.1 mywebsite.core.com 从这里安装的包:https://dotnet.microsoft.com/download/dotnet-core/thank-you/runtime-aspnetcore-3.1.5-windows-hosting-bundle-installer

错误是:

HTTP 错误 500.30 - ANCM 进程中启动失败常见解决方案 此问题:应用程序无法启动应用程序已启动 但随后停止应用程序启动但在期间抛出异常 启动故障排除步骤:检查系统事件日志是否有错误 消息 启用记录应用程序进程的标准输出消息 将调试器附加到应用程序进程并检查更多 信息访问:https://go.microsoft.com/fwlink/?LinkID=2028265

我感觉这可能与我的 launchSettings.json 文件有关,不知道应该如何调整它...

当我从 Visual Studio 启动我的网站时,它曾经直接打开一个招摇链接,但现在发布到 IIS 后,我无法再从 Visual Studio 启动它(无法连接到网络服务器 IISExpress)... 有什么帮助吗?

这是一个 .NET Core 3.1 控制台应用程序,在我尝试发布到 IIS 之前,它使用我的 API 打开了一个招摇。

后期编辑: https://docs.microsoft.com/en-us/aspnet/core/test/troubleshoot-azure-iis?view=aspnetcore-3.1 这表明了两个可能的原因:缺少对密钥库的权限(不是问题,我使用 azure cli 登录 Azure);另一个是:“由于针对不存在的 ASP.NET Core 共享框架版本,应用程序配置错误。请检查目标计算机上安装了哪些版本的 ASP.NET Core 共享框架。”

后期编辑: C:\inetpub\mywebsite 中的 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=".\XXX.MyWebsite.Api.RestApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="outofprocess" />
        </system.webServer>
      </location>
    </configuration>

我居然把hostingModel="inprocess"改成了:hostingModel="outofprocess"

我的项目 > 属性 > 调试看起来像这样:

(如您所见,我从 In Process 更改为 Out of Process)

IIS 中的绑定如下所示:

更新:在这一切之后,我的错误变为:

HTTP 错误 502.5 - ANCM 进程外启动失败常见 此问题的解决方法:应用程序启动失败 应用程序进程已启动但随后停止 应用程序进程 已启动但未能侦听配置的端口

(最初是 500.30)

不太确定还能尝试什么。如何检查端口是否配置正确?

【问题讨论】:

这能回答你的问题吗? HTTP Error 500.30 - ANCM In-Process Start Failure 重新 keyvault 权限:有访问权限,但是应用程序池在 IIS 中运行的用户是什么? 您可以通过将 web.config 上的 stdoutLogEnabled 设置为 true 来检查错误日志,并让我们知道您遇到了什么错误。您将在发布文件夹的日志文件夹中看到日志文件。可能是证书问题。 如果服务器安装了 .NET Core 2.2,请检查以确保它具有 2.2 的最新更新。 2.2.1 中有一个错误(我认为,不要引用我的话)导致此错误。您认为安装 3 或 3.1 会减轻这种情况,但事实并非如此。如果这是您的问题,您也可以发布为独立的以使其正常工作。 运行一些基本诊断以首先排除常见错误,docs.jexusmanager.com/tutorials/ancm-diagnostics.html 如果问题仍然存在,请编辑您的问题以包含报告。 【参考方案1】:

尝试关注这篇文章。 https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/development-time-iis-support?view=aspnetcore-3.1

如果它不起作用 - 请确保在 IIS 中为您的 Web 应用程序启用了应用程序池。也尝试重新启动 IIS。

【讨论】:

"确保在 IIS 中为您的 Web 应用程序启用了应用程序池。" - 谢谢沃拉迪米尔。你建议我怎么做?实际上,在 IIS 中,我有 ApplicationPoolIdentity ......但我仍然希望该站点至少加载 swagger,因为它不需要从登录页面连接到 Azure。当我从 Visual Studio 本身启动我的站点时,没有在 IIS 中托管它,我只需使用 azure cli 登录并使用该托管标识从密钥保管库中读取。 (有效) IIS 不关心您的网站上有什么。 Swagger 只是一个组件,它作为中间件集成到您的请求管道中。从您的屏幕截图中,我可以看到您仍在使用“IIS Express”,但是您应该将其切换为“IIS”。在 IIS 中导航到应用程序池页面,找到您的池并确保它已启用。同样对于您的池,您应该将应用程序的设置从托管切换到非托管。 沃拉迪米尔,谢谢。我不知道我怎么会错过“IIS Express”的东西。你说的对。现在我收到另一个错误:AggregateException:发生了一个或多个错误。 (SQLite 错误 14:'无法打开数据库文件'。)你建议我关闭这个问题吗?新错误似乎与目前讨论的内容无关。 Weird..I got HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure again after restartig the laptop 1) 确保您已以管理员身份打开 VS 2) 确保 IIS 有权访问您保存源代码的文件夹【参考方案2】:

通过 Kestrel 方式调试

请尝试将您的应用程序发布到特定文件夹。用于发布的 Dotnet Core Cli 命令。下面的命令发布到“输出”文件夹

 dotnet publish -o output

通过cd 命令移动到publish 文件夹后。键入 dotnet &lt;project-name&gt;.dll 。使用您的项目名称而不是 &lt;project-name&gt;

您的应用程序应该正在运行并且应该可以正常运行。如果您遇到任何问题,那是由于应用程序错误

部署到 IIS

在将您的应用程序托管到生产或登台之后,安装 IIS(不是 express)并 .NET 核心托管包。[单击此处下载托管包]

之后,你可以关注这个guide

【讨论】:

以上是关于.NET Core 托管到 IIS,我收到 HTTP 错误 500.30 - ANCM 进程内启动失败的主要内容,如果未能解决你的问题,请参考以下文章

在 IIS 中托管 ASP Net Core 应用程序时无限页面加载

ASP.NET Core部署系列一:发布到IIS上

HTTP 错误 500.0 - Dot net core 3.1 中的 ASP.NET Core IIS 托管失败(进程中)

.NET Core 发布到 IIS 问题 - 403.14

使用iis反向代理.net core应用程序

将 ASP NET Core 部署到 IIS