在 IIS 中托管 .NET Core Web 应用程序时,您可以在进程内和进程外托管模型之间进行选择。
除了通过使用进程内获得更好的性能外,“进程内”和“进程外”托管模型之间有哪些优缺点?
对于测试/开发与生产,一个比另一个更好吗?
我想“进程外”托管模型更容易附加调试器。
最佳答案
从 ASP.NET Core 3.0 开始,“进行中”是默认设置,请参阅 this Microsoft page .在 IIS.ASP.NET Core 模块上托管 Web 应用程序时,会将请求转发到 IIS HTTP Server (IISHttpServer)。 IIS HTTP 服务器是与 IIS 一起在进程内运行的服务器。
如果您使用进程外托管模型,则不会使用 IIS HTTP Server。相反,Kestrel Web 服务器用于处理您的请求。
来自 Rick's blog :
“进程中”提供了更好的性能,并且通常占用的资源更少,因为它避免了 IIS 和 Kestrel 之间的额外网络跳跃,并在需要监控的机器上维护了一个额外的进程。
在某些情况下可能需要 OutOfProcess 托管,例如故障排除和调试故障服务器(例如,您可以在启用控制台日志记录的情况下运行)或者如果您希望在同一应用程序的不同部署之间 100% 兼容,无论是在 Windows 还是 Linux 上,因为 Kestrel 是用于在所有平台上处理 HTTP 请求的主要机制。
使用 InProcess 模型,您不使用 Kestrel,而是使用直接与 IIS 的请求管道接口(interface)的自定义 IISHttpServer 实现。
但是对于大多数意图和目的,我认为在 IIS 上运行 InProcess 是可行的方法,除非您非常具体地需要 Kestrel 和 OutOfProcess 托管。
关于iis - 在 IIS 中托管 .NET Core Web 应用程序时, "In process"和 "out of process"托管模型之间的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59320690/