一般来说,如果第三方服务提供商为我管理网络服务器,则它是托管的,而如果我自己管理网络服务器,则它是自托管的。
在ASP.NET Core中,在这两个地方,我都是在服务器上发布代码的,在IIS的时候不叫自托管吗? “自我”究竟是什么意思?
对于作为程序员的我来说,自托管意味着应用程序应该能够自己托管,这意味着它必须能够直接监听 Web 请求,或者它必须在自己的进程上运行。我错了吗?请有人帮助我理解自托管中“自我”的含义。
此外,微软用来解释自主机的图像对我来说非常困惑,据我所知,IIS 使用 w3wp.exe 来执行应用程序
上图很好,w3wp 是我们的应用程序执行的进程,而 IIS 是整个容器。
但是现在,看看这张图片
这里应用程序是包装器,Kestral 在应用程序中,进程 (dotnet.exe/application.exe) 是包含 Kestral 的包装器,为什么会这样?
对我来说,应该是
为什么我的图像与 Microsoft 自托管的图像不同?我在哪里错过了这个概念?
最佳答案
我认为你需要扩展这个概念:
托管 本质上是通过第三方服务公开的应用程序(网络应用程序),该服务为您运行服务器(网络服务器)。
自托管 是通过您管理的服务器公开的同一个应用程序。
有时,正如 Vineet 正确提到的那样,自托管代表具有服务器进程的应用程序暴露应用程序本身。就像 Blazor 的 Kestrel。
IIS 不是托管或自托管的区别,只是概念的基础。
从我的角度来看,当我使用集成在 Visual Studio 调试中的 IIS Express 时,该应用程序是自托管和同时托管的。
从 Web 服务器的角度来看,托管在 IIS Express 中,同时,从服务的角度来看,它是自托管的。
仅供引用:应用程序名称.exe Blazor 应用程序的编译器生成的只是一个基于 Kestrel 的启动器。是启动 的网络服务器应用程序名称.dll
下面的示例来自两个完全不同的应用程序。可执行文件(您可以使用二进制编辑器打开它)是相同的。
关于asp.net - 为什么在 IIS 之外托管被称为自托管?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69039725/