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

4
当在运行IIS 10的Windows Server 2016数据中心上托管ASP.NET Core MVC应用程序时,应用程序无法加载,显示以下消息:
HTTP Error 500.30 - ANCM In-Process Start Failure 我使用Visual Studio 2017 (9)创建了该应用程序,并使用.NET Core 2.2,尽管我在服务器上安装了.NET Core 2.2.3。
在服务器上:
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应用程序事件日志显示:

应用程序'/LM/W3SVC/3/ROOT',物理根'C:\inetpub\wwwroot\healthmonitormvc'无法加载clr和托管应用程序。意外异常:在c:\b\w\da744fbcc13abce\src\servers\iis\aspnetcoremodulev2\inprocessrequesthandler\inprocessapplication.cpp:198处返回HRESULT 0x800700b7。

Github上有一些关于这个错误和hresult的讨论,但没有解决方案。

相同的代码在本地IIS上可以正常工作。myapp.exe也可以加载(以及dotnet myapp.dll),所以看起来是一个IIS配置问题(或者在GitHub上指出的.NET Core缺陷,这意味着我可能正在寻求一个解决方法)。stdout文件被创建,但它没有任何内容。

该项目是非核心项目的解决方案的一部分。然而,我使用Visual Studio Web Publisher发布了该项目,并且它按预期运行。

一篇 Stack Overflow 的问题建议将托管模型更改为 OutOfProcess,但我不想使用 out of process。它也无法加载并显示相同的 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。您是否看到任何异常?如果是,请将其添加到您的问题中,以及堆栈跟踪。 - Chris Pratt
我忘了提到我已经这样做了,它可以加载和运行。我还忘了提到stdout文件已经被创建,但没有内容。 - tonyatl
依赖关系最小或几乎没有 - 即没有数据库,这是来自 VS 模板的默认样板代码。这是一个零添加代码的入门/学习项目。 - tonyatl
AspNetCoreModuleV2 表示正在运行 "in-process"。你在一个应用程序池中运行多个站点吗?问这个问题是因为默认的 in-process 设置每个应用程序池只能有一个站点。 - Asons
应用程序池仅服务于一个应用程序,并设置为未托管,运行在应用程序池身份下。 - tonyatl
显示剩余2条评论
3个回答

13

我曾经遇到和你一样的问题,后来发现在Azure App Service中运行dotnet YourAPI.dll可以解决。请按以下步骤操作:

App Service高级工具进入 (会跳转到 Kudu) → 调试控制台PowerShell;

进入site/wwwroot文件夹并运行下面的命令:

dotnet YourAPI.dll

结果向我显示了详细的错误信息。


不知道这个。太棒了。谢谢。 - Matt M
这为我提供了一些额外的调试信息...我没有使用PowerShell,但在git bash中运行了 dotnet YourAPI.dll 并获得了预期的结果。 - Tamas

3

移除环境变量

<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。


这是我发布的应用程序中唯一有效的方法!谢谢! - RichieMN

2
我们遇到了完全相同的问题,移除环境变量后问题得以解决。
原因是我们在IIS和web.config文件中设置了相同的环境变量。
我的猜测是,在构建IConfiguration时,builder.AddEnvironmentVariable()会抛出重复键异常。
要检查您的IIS环境变量,请转到您的站点,选择ConfigurationEditor->在顶部的Section中选择system.webServer/aspNetCore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接