IIS会回收ASP.NET Core进程吗?

11
我需要在我的asp.net core应用程序中运行长时间运行的后台任务。 我知道Azure Webjobs和其他外部处理技术,但我更愿意保持解决方案简单,并直接在asp.net核心进程中运行这些任务。 我使用Kestrel,应用程序托管在IIS中。
我知道IIS偶尔会重启IIS进程。那么它是否也会重启asp.net core进程?
3个回答

4

Asp.Net Core < 2.2

Asp.net Core运行在一个单独的进程dotnet.exe中,即使它托管在IIS中。但这并不意味着它作为一个独立的进程运行。通过AspNetCoreModuleIIS仍然负责Asp.net core进程(dotnet.exe)的生命周期。

因此,答案是是的,IIS也会回收asp.net core进程。

Asp.Net Core >= 2.2

与之前的out-of-process托管模型相比,Asp.Net Core 2.2在IIS上支持in-process托管模式。这似乎只是一种优化,可以避免将请求反向代理到单独的dotnet进程中产生额外的成本。IIS将会回收应用程序池以及Asp.net Core应用程序。


1

-2

不会的。IIS 应用程序池只负责 w3wp.exe 进程。

ASP.NET Core 是由 Kestrel 进程托管的,而 IIS 只是它前面的反向代理。


Kestrel进程将由apppool用户生成。在回收期间会发生什么?在回收期间,IIS不会杀死apppool用户的所有进程吗? - pepo
@pepo 你可以进行一些实验。我相信Kestrel进程仍然存在。IIS不会“杀死apppool用户的所有进程”,从未如此。它只是替换工作进程(w3wp.exe)。 - Lex Li
1
嗯,我不太清楚那个:https://github.com/aspnet/KestrelHttpServer/issues/1040#issuecomment-267506588 - Clement
@Clement 我认为David遗漏了细节。如果我们仔细分离IIS和ASP.NET Core,那么IIS根本不知道Kestrel是什么。根据他的话,我只能猜测ASP.NET Core模块插入IIS工作进程中,在回收步骤中劫持并发送信号给Kestrel退出。幸运的是,该模块在GitHub上完全开源,因此我们可以检查代码并查看如何实现。 - Lex Li
1
可观察的结果似乎表明相反的情况(至少在 .net-core 1.1 中)- 即 dotnet 进程已关闭。 - SpruceMoose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接