【发布时间】:2021-11-01 11:43:25
【问题描述】:
一般来说,如果第三个服务提供商为我管理网络服务器,那么它是托管的,而如果我自己管理网络服务器,那么它是自托管的。
在ASP.NET Core中,在这两个地方,我都是在服务器上发布代码的人,在IIS的时候不叫自托管吗? “自我”到底是什么意思?
对于作为程序员的我来说,自托管意味着应用程序应该能够托管自己,这意味着它必须能够直接监听 Web 请求,或者它必须在自己的进程上运行。我错了吗?请有人帮我理解自托管中“自我”的含义。
另外,微软用来解释自主机的图像让我很困惑,据我所知,IIS 使用 w3wp.exe 来执行应用程序
上图不错,w3wp是我们应用执行的进程,IIS是整体容器。
这里应用程序是包装器,Kestral 在应用程序内,进程(dotnet.exe/application.exe)是包含 Kestral 的包装器,为什么会这样?
对我来说应该是
为什么我的图像与 Microsoft 的自托管图像不同?我在哪里错过了这个概念?
【问题讨论】:
-
我相信,自托管本质上意味着应用程序能够启动 Web 服务器来托管自己,而不依赖于 IIS 等外部 Web 服务器。 ASP.NET 核心应用程序运行自己的 Kestrel 服务器实现,其代码位于 Program.cs 文件中。参考:docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/…
-
@VineetDesai 是的,并且进程名称与应用程序名称相同,意味着application.exe是托管已编译应用程序的那个,所以,自托管意味着托管在自己的进程中,不是吗?实际上 asp.net core 是一个控制台应用程序,它在自身内部运行 Web 应用程序。
标签: asp.net asp.net-core asp.net-web-api