具有四个虚拟应用程序的 Azure Web App 无法启动一个 ASP.NET Core 6 Web API

问题描述 投票:0回答:1

我们有一个应用程序服务,托管四个虚拟应用程序:一个 Vue 应用程序(静态)、一个 Angular 应用程序(静态)和两个用 .NET 编写的 API:

Four virtual applications

这四个成功地并行运行,它们是用 .NET Framework 4.7 编写的。

将两者升级到 .NET 6 后,两个 API 之一不断重新启动并且不返回任何内容。

我们已经完成了:

  • API 1 升级到 .NET 6 并部署在 AspNetCoreHostingModel InProcess 中。两个 API 仍然有效

  • API 2 升级到 .NET 6 并部署在 AspNetCoreHostingModel InProcess 中。 API 2 抛出错误

    HTTP 错误 500.35 - ANCM 同一进程中存在多个进程内应用程序:不允许多个进程内应用程序。

  • API 2 更改为 AspNetCoreHostingModel OutOfProcess。 API 2 现在抛出错误

    HTTP 错误 500.34 - 不支持 ANCM 混合托管模型:不支持拥有一个 InProcess 和一个 OutOfProcess。

  • API 1 和 2 更改为 AspNetCoreHostingModel OutOfProcess。 API 2 工作成功,API 1 不再工作,它不断地一遍又一遍地启动而没有给出结果,并且没有记录任何异常。

查看日志记录时,仅显示 kestrel 行,显然它没有到达我们的代码。虽然 API 2 显示每次它在具有随机端口的本地主机上启动,但 API 1 始终在本地主机、端口 5000 上启动。

当我 ancm 日志时,它显示它开始在随机端口上侦听 API 1,直到由于无法连接而超时。

API 1 似乎在端口 5000 上错误地启动,即使我们没有在任何地方明确配置它。

更新:

项目文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
      <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.1" />
    <PackageReference Include="Serilog.AspNetCore" Version="7.0.0" />
    <PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
    <PackageReference Include="Swashbuckle.AspNetCore.Newtonsoft" Version="6.5.0" />
    <PackageReference Include="System.Net.Http" Version="4.3.4" />
  </ItemGroup>

  <ItemGroup>
    ...
  </ItemGroup>

</Project>

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=".\Rdc.Caremail.Web.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" />
    </system.webServer>
  </location>
</configuration>
azure .net-core azure-web-app-service
1个回答
0
投票

AspNetCoreModuleV2
不允许在单个
in-process
中存在多个
app service
虚拟应用程序。

要解决此问题,您可以尝试在所有

AspNetCoreModuleV2
文件中将
AspNetCoreModule
替换为
web.config

显然,您还需要将两个 API 的

AspNetCoreHostingMode
重置为
inprocess

这应该允许您执行多个虚拟应用程序。

注意:dotnet Core 应用程序本地没有

web.config
文件。仅当您通过
KUDU Console

部署应用程序后,它才可用
© www.soinside.com 2019 - 2024. All rights reserved.