我有一个 ASP.NET Core 8.0 Web API,托管在 Windows 11 服务器上默认网站下的两个 IIS 应用程序(app-1 和 app-2)上。
两个 IIS 应用程序都指向相同的物理路径 (
inetpub\wwwroot\myapp
),并且每个应用程序都有自己的专用应用程序池(app1
和 app2
)。应用程序池具有唯一的标识(app1svc
和 app2svc
),它们都是管理员组的成员。
在 Web API 中,我有一个
AppEvents
类实现 IHostedService
,并使用 StartAsync
和 StopAsync
方法来处理应用程序启动和停止事件。在 Program.cs
中,我使用 builder.Services.AddHostedService()
注册托管服务。
访问
http://localhost/app-1
时,会按预期触发StartAsync
方法。但是,当访问 http://localhost/app-2
时,StartAsync
方法不会执行。尽管两个 IIS 应用程序都指向同一物理目录,但该应用程序似乎只启动一次。
我尝试将
AspNetHostingModel
从 InProcess
更改为 OutOfProcess
,但行为保持不变。
有没有办法部署同一个Web应用程序的多个实例,每个实例单独运行但指向相同的物理目录,以便每个实例正确触发自己的
StartAsync
?
是否不需要使用AddHostedService。默认模板代码应该可以正常工作
public static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);// 将服务添加到容器中。
builder.Services.AddControllers();
var app = builder.Build();
// Configure the HTTP request pipeline.
app.UseAuthorization();
app.MapControllers();
app.Run();
}