.NET Core 2.2 - “HTTP 错误 500.30 - ANCM 进程内启动失败”

Posted

技术标签:

【中文标题】.NET Core 2.2 - “HTTP 错误 500.30 - ANCM 进程内启动失败”【英文标题】:.NET Core 2.2 - "HTTP Error 500.30 - ANCM In-Process Start Failure" 【发布时间】:2019-08-25 09:03:48 【问题描述】:

在运行 IIS 10 的 Windows Server 2016 数据中心上托管 ASP.NET Core MVC 应用程序时,应用程序无法加载并显示以下消息:

HTTP 错误 500.30 - ANCM 进程中启动失败

尽管我在服务器上安装了 .NET Core 2.2.3,但我还是使用 .NET Core 2.2 通过 Visual Studio 2017 (9) 创建了应用程序。

在服务器上:

dotnet --info
.NET Core SDK (reflecting any global.json):

 Version:   2.2.105
 Commit:    7cecb35b92

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.14393
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\2.2.105\

Host (useful for support):
  Version: 2.2.3
  Commit:  6b8ad509b6

.NET Core SDKs installed:
  2.1.4 [C:\Program Files\dotnet\sdk]
  2.2.105 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.0.7 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Windows 应用程序事件日志显示:

物理根目录为“C:\inetpub\wwwroot\healthmonitormvc”的应用程序“/LM/W3SVC/3/ROOT”无法加载 clr 和托管应用程序。意外异常:在 c:\b\w\da744fbcc13abce\src\servers\iis\aspnetcoremodulev2\inproces-s-requesthandler\inprocessapplication.cpp:198 返回 HRESULT 0x800700b7

GitHub 上有几个关于此错误和 hresult 的帖子,但没有解决方案。

相同的代码适用于本地 IIS。 myapp.exe 也会加载(dotnet myapp.dll 也是如此),所以这似乎是一个 IIS 配置问题(或 GitHub 上指出的 .NET Core 缺陷,这意味着我可能正在寻求解决方法)。 stdout 文件已创建,但它没有任何内容。

此项目是非核心项目解决方案的一部分。但是,我使用 Visual Studio 网络发布者发布了该项目,它按预期运行。

一个 Stack Overflow 问题建议更改为 OutOfProcess 作为托管模型,但我不想使用进程外。它也无法加载相同的 hresult。 .NET 2.2.3 可能在很大程度上被破坏了。但是因为我可以在本地运行它,所以存在一个可行的配置。

这是应用程序的 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=".\my.name.space.HealthMonitor.Mvc.exe" arguments="exec &quot;.\my.anme.space.HealthMonitor.Mvc.dll&quot;" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" hostingModel="InProcess">
        <environmentVariables>
          <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
        </environmentVariables>
      </aspNetCore>
      </system.webServer>
  </location>
    <system.web>
        <compilation targetFramework="netcoreapp2.2" />
    </system.web>
</configuration>

我希望页面能够像在 IIS Express 或 IIS 本地中那样加载,其中显示默认的开箱即用页面。

【问题讨论】:

启动过程中可能抛出异常。仅仅因为它在本地运行并不意味着它会在发布时运行。总是存在诸如数据库连接之类的依赖关系,这些依赖关系会有所不同并可能导致异常。尝试打开生产服务器上发布应用程序目录的命令提示符并运行dotnet MyApp.dll。你看到任何例外吗?如果是这样,请将它们与堆栈跟踪一起添加到您的问题中。 我忘了提到我这样做了,它会加载并运行。我也忘了提到标准输出文件已创建但没有内容。 并且依赖项很少甚至没有 - 即没有 db,这是 vs 模板中的默认样板代码。这是一个初学者/学习者项目,添加了 0 个代码 AspNetCoreModuleV2 表示正在“进程中”运行。您是否在每个应用程序池中运行多个站点? ... 作为默认的进程内设置询问每个应用程序池只能有一个站点。 apppool 只为 1 个应用提供服务,并设置为非托管并以 apppool 身份运行 【参考方案1】:

我遇到了同样的问题,我发现在 Azure 应用服务 中运行 dotnet YourAPI.dll。前往:

App Service高级工具Go(它会带你去 Kudu) → 调试控制台PowerShell;

然后导航到site/wwwroot 现在运行:

dotnet YourAPI.dll

结果显示了详细的错误消息。

【讨论】:

对此一无所知。这很棒。 ty【参考方案2】:

删除环境变量

<environmentVariables>
  <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="DEVELOPMENT" />
</environmentVariables>

导致页面加载。我不完全明白为什么。显然我不明白它是如何与应用程序交互的(尽管我认为我明白了)。

server set 显示:

> ASPNETCORE_ENVIRONMENT=Development

我确实注意到 IIS 管理器配置编辑器显示了 DEVELOPMENT 以及我的 Development 用于相同的环境变量。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;

namespace My.Name.Space.HealthMonitor.Mvc

    public class Startup
    
        public Startup(IConfiguration configuration)
        
            Configuration = configuration;
        

        public IConfiguration Configuration  get; 

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        
            services.Configure<CookiePolicyOptions>(options =>
            
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            );

            services.Configure<IISServerOptions>(options =>
            
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.AutomaticAuthentication = true;
            );

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        
            if (env.IsDevelopment())
            
                app.UseDeveloperExceptionPage();
            
            else
            
                app.UseExceptionHandler("/Home/Error");
            

            app.UseStaticFiles();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            
                routes.MapRoute(
                    name: "default",
                    template: "controller=Home/action=Index/id?");
            );
        
    

问题基本上解决了,表明我需要更好地了解 ASPNETCORE_ENVIRONMENT。

【讨论】:

这是唯一对我发布的应用程序有用的东西!谢谢!【参考方案3】:

我们有完全相同的问题,删除环境变量对我们有用。

原因是我们在 IIS 和文件 web.config 中设置了相同的环境变量。

我的客人是 builder.AddEnvironmentVariable() 在构建 IConfiguration 时抛出重复键异常。

要检查您的 IIS 环境变量,请转到您的站点,ConfigurationEditor-> 选择顶部 Sectionsystem.webServer/aspNetCore

【讨论】:

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

HTTP 错误 502.5 - 升级到 ASP.NET Core 2.2 后 ANCM 进程外启动失败

从.Net core 2.2迁移到.Net Core 3.0

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

获取 ASP.NET-Core 2.2 控制器中的控制器名称和方法名称

.Net Core 2.2 项目部署到IIS

如何将 .NET Core 2.2 Web API 迁移到 .NET Core 3.0?