asp.net - 为什么在 IIS 之外托管被称为自托管?

标签 asp.net asp.net-core asp.net-web-api

一般来说,如果第三方服务提供商为我管理网络服务器,则它是托管的,而如果我自己管理网络服务器,则它是自托管的。
在ASP.NET Core中,在这两个地方,我都是在服务器上发布代码的,在IIS的时候不叫自托管吗? “自我”究竟是什么意思?
对于作为程序员的我来说,自托管意味着应用程序应该能够自己托管,这意味着它必须能够直接监听 Web 请求,或者它必须在自己的进程上运行。我错了吗?请有人帮助我理解自托管中“自我”的含义。
此外,微软用来解释自主机的图像对我来说非常困惑,据我所知,IIS 使用 w3wp.exe 来执行应用程序
enter image description here
上图很好,w3wp 是我们的应用程序执行的进程,而 IIS 是整个容器。
但是现在,看看这张图片
enter image description here
这里应用程序是包装器,Kestral 在应用程序中,进程 (dotnet.exe/application.exe) 是包含 Kestral 的包装器,为什么会这样?
对我来说,应该是
enter image description here
为什么我的图像与 Microsoft 自托管的图像不同?我在哪里错过了这个概念?

最佳答案

我认为你需要扩展这个概念:
托管 本质上是通过第三方服务公开的应用程序(网络应用程序),该服务为您运行服务器(网络服务器)。
自托管 是通过您管理的服务器公开的同一个应用程序。
有时,正如 Vineet 正确提到的那样,自托管代表具有服务器进程的应用程序暴露应用程序本身。就像 Blazor 的 Kestrel。
IIS 不是托管或自托管的区别,只是概念的基础。
从我的角度来看,当我使用集成在 Visual Studio 调试中的 IIS Express 时,该应用程序是自托管和同时托管的。
从 Web 服务器的角度来看,托管在 IIS Express 中,同时,从服务的角度来看,它是自托管的。
仅供引用:应用程序名称.exe Blazor 应用程序的编译器生成的只是一个基于 Kestrel 的启动器。是启动 的网络服务器应用程序名称.dll
下面的示例来自两个完全不同的应用程序。可执行文件(您可以使用二进制编辑器打开它)是相同的。
enter image description here

关于asp.net - 为什么在 IIS 之外托管被称为自托管?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69039725/

相关文章:

c# - 角色认证与授权

.net - 我对 .NET Core 中的 web.config 感到困惑

asp.net - 表单键或值长度限制 2048 超出

c# - 对列表项使用标签帮助器验证

c# - 如何在完成请求后立即处理Unity DI创建的对象?

c# - 如何记录我的 Web API 项目中依赖项解析期间抛出的异常?

javascript - 使用 SignalR 查明是否有人在另一个网站上按下了按钮

asp.net - 为什么 MSBuild 将 *.XmlSerializers.dll 程序集放在已发布的 Web 应用程序的根文件夹中?

c# - 如何在 ASP.NET MVC 中获取不带参数的 Action 的 URL

c# - 将参数传递给 Web API 模型联编程序