我们有一个应用程序服务,托管四个虚拟应用程序:一个 Vue 应用程序(静态)、一个 Angular 应用程序(静态)和两个用 .NET 编写的 API:
这四个成功地并行运行,它们是用 .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>
AspNetCoreModuleV2
不允许在单个 in-process
中存在多个 app service
虚拟应用程序。
要解决此问题,您可以尝试在所有
AspNetCoreModuleV2
文件中将 AspNetCoreModule
替换为 web.config
。
显然,您还需要将两个 API 的
AspNetCoreHostingMode
重置为 inprocess
。
这应该允许您执行多个虚拟应用程序。
注意:dotnet Core 应用程序本地没有
web.config
文件。仅当您通过 KUDU Console
部署应用程序后,它才可用