我有一个 3.1 net core web api,我必须从进程内切换到进程外托管模型,因为我的托管环境只有一个应用程序池,并且我有两个应用程序在该池中运行。由于与应用程序池相关的进程内限制,我不得不将两个应用程序切换到进程外。
Web api 在我的本地环境(从 vs studio 运行时)和托管环境中都会在启动时卡住/加载/挂起。唯一的区别是在托管环境中,一段时间后,我收到“HTTP Error 502.5 ANCM Out-Of-Process Startup Failure”类型的错误。
在做了一些研究之后,我发现大多数错误是由“Program.cs”类中的一些代码引起的。确实如此。注释掉以下代码部分后,它可以工作。
public static IHostBuilder CreateHostBuilder(string[] args, IConfiguration configuration) =>
Host.CreateDefaultBuilder(args)
//.ConfigureAppConfiguration(builder =>
//{
// builder.Sources.Clear();
// builder.AddConfiguration(configuration);
//})
.UseSerilog()
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
发生的事情是我清除了默认配置,以便我只能在“Main”方法中插入我明确定义的配置(至少这是我认为我在编写该代码时想要做的)。
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json")
.AddUserSecrets(Assembly.GetExecutingAssembly())
.AddEnvironmentVariables()
.Build();
不知何故,清除默认配置会导致应用程序无法在进程外托管模型中运行,我真的很想知道原因。