【问题标题】:When hosting .NET core web app in IIS, what are the pros and cons between "In process" and "out of process" hosting model在 IIS 中托管 .NET Core Web 应用程序时,“进程内”和“进程外”托管模型之间的优缺点是什么
【发布时间】:2021-01-08 20:22:29
【问题描述】:

在 IIS 中托管 .NET Core Web 应用程序时,您可以在进程内和进程外托管模型之间进行选择。

除了使用进程内更好的性能外,“进程内”和“进程外”托管模型之间有哪些优缺点?

在测试/开发与生产方面,哪一种比另一种更好?

我认为“进程外”托管模型更容易附加调试器。

【问题讨论】:

  • 当你可以在进程中使用时,使用它。我想知道为什么您认为将调试器附加到进程外更容易,因为在这两种情况下您只需找到要附加的正确进程。

标签: iis .net-core backend


【解决方案1】:

从 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 的请求管道接口的自定义 IISHttpServer 实现。

但对于大多数意图和目的,我认为在 IIS 上运行 InProcess 是可行的方法,除非您非常具体地需要 Kestrel 和 OutOfProcess 托管。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 2020-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 2018-05-28
    • 2021-09-19
    相关资源
    最近更新 更多