尝试在 Plesk Onyx 17.8.11 上托管 ASP.NET 2.2 网站时出错 - HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

Error trying to host an ASP.NET 2.2 Website on Plesk Onyx 17.8.11 - HTTP Error 500.0 - ANCM In-Process Handler Load Failure

我正在尝试在 interserver.com 共享托管平台 上托管 ASP.NET 2.2 网站。他们使用 Plesk Onyx 版本 17.8.11 作为他们的托管平台控制面板。

我已验证主机已正确路由和设置,但仍然出现运行时错误:

HTTP 错误 500.0 - ANCM 进程内处理程序加载失败

我向客户服务报告了这个问题,他们给我发了一些尝试的文章,但没有找到解决方案。由于错误表明找不到关键的 aspnet 核心库,他们说他们有 "installed .NET core 2.1.10 and 2.2.2 hosting bundle" 但我仍然遇到同样的错误。

主机上的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=".\BridgeSite.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="InProcess" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: 7bcb9c33-cd6b-4078-9742-869d5dd7bxxx -->

Whosebug 系列有什么建议吗?

这个错误是documented,连同解决方法:

500.0 In-Process Handler Load Failure

The worker process fails. The app doesn't start.

The ASP.NET Core Module fails to find the .NET Core CLR and find the in-process request handler (aspnetcorev2_inprocess.dll). Check that:

最有可能的情况是您根本没有安装 .NET Core 运行时,或者至少没有安装正确的版本以匹配您的项目目标。

由于这是一个共享托管平台,我无法访问 fiddle 周围的服务器配置。据我所知,ASP.NET Core 2.2.4 运行时安装出现问题,AspNetCoreModuleV2.dll 是 missing/corrupt/misplaced?

在这上面花了很多时间后,我发现了一些解决方法:

  1. 每次发布时,转到发布代码的主机上的文件夹,打开自动生成的 web.config,在 handlers 节点下将 "AspNetCoreModuleV2" 替换为 "AspNetCoreModule" .通过默认将其返回到以前的包,这是可行的,但是很糟糕,因为每次发布代码时都必须手动完成。

或,

  1. 在 Visual Studio 解决方案中,在属性 > PublishProfiles 下打开(或创建新的)发布配置文件。在 PropertyGroup 中添加:<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>。这可行,但是是一个很大的 hack,应用程序将不会获得 InProcess(默认)
  2. 的所有性能提升

经过测试,我发现你可以使用一个或另一个,你不必同时使用。

我希望随着托管服务继续更新其运行时,这个问题会随着时间的推移自行解决,但现在希望这些解决方法也能帮助您。

对于 Asp.Net 核心 2.2 MVC。 1. 在项目的根目录下创建 web.config。 2. 过去这个配置:

  <?xml version="1.0" encoding="utf-8"?>
  <configuration>
    <location path="." inheritInChildApplications="false">
      <system.webServer>
        <handlers>
          <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
        </handlers>
        <aspNetCore processPath="dotnet"
                    arguments=".\MyApp.dll"
                    stdoutLogEnabled="false"
                    stdoutLogFile=".\logs\stdout"
                    hostingModel="InProcess" />
      </system.webServer>
    </location>
  </configuration>

我遇到了与 Interserver.com 相同的问题。

支持人员通过将我的应用程序池切换到 64 位来解决问题。从我读到的关于其他 Plesk 托管提供商的内容来看,默认情况下创建虚拟机的脚本默认创建 32 位应用程序池。我猜测 AspNetCoreModuleV2 需要 64 位,但这只是一个猜测。很高兴我的网站 运行 正在处理中。