【问题标题】:Why is hosting outside of IIS termed as self host?为什么在 IIS 之外托管被称为自托管?
【发布时间】: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


【解决方案1】:

我认为您需要扩展这个概念:
托管本质上是通过第三方服务公开的应用程序(网络应用程序),它为您运行服务器(网络服务器)。自托管是通过您管理的服务器公开的同一个应用程序。

有时,正如 Vineet 正确提及的那样,自托管代表具有 服务器 进程的应用程序,该进程公开应用程序本身。就像 Blazor 的 Kestrel。

IIS 不是托管或自托管的区别,只是概念的基础。

从我的角度来看,当我使用集成在 Visual Studio 调试中的 IIS Express 时,应用程序是自托管的,同时也是托管的。
从 Web 服务器的角度托管在 IIS Express 中,同时从服务的角度自托管

仅供参考:编译器为 Blazor 应用程序生成的 applicationName.exe 只是基于 Kestrel 的启动器。是启动 applicationname.dll

的 Web 服务器

下面的示例来自两个完全不同的应用程序。可执行文件(可以用二进制编辑器打开)是一样的。

【讨论】:

  • @Nicoloa Biada ,我不这么认为,无论你在说什么,你都将服务器管理员置于中心位置,这是正确的,但在编程术语中,我们只谈论程序,自我托管意味着一个应用程序在自己的进程中运行,例如Asp.NET Core运行在apllicationName.exe中,可以看图docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/…
  • applicationName.exe 只是一个包装器。它是您的 applicationName.dll 的 Kestrel 启动器,它只是一个 Web 服务器,您的应用程序是一个需要 Web 服务器才能工作的 DLL。所以在.net 中,这种应用程序不是自托管的。如果您开发响应 http/https 端口的 C# 套接字应用程序,我可以同意“自托管”概念。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多