Microsoft的文档绝对糟糕。 我需要将我开发的.net core 2 Web应用程序部署到IIS服务器,但无法获得任何直接答案。这只是我的问题的开始。
IWebHost,WebHostBuilder,BuildWebHost有什么区别?
谢谢!
答案 0 :(得分:16)
首先,首先让我不同意您的说法:ASP.NET Core上的文档实际上非常好。是的,它可能仍然缺少某些细节,并且还存在一些赶上发行版更改的问题,但是总体而言,内容确实不错,并且从事此工作的团队确实做得非常出色。编写如此庞大且快速变化的框架的文档确实很困难,而且从文档中获得的信息量实际上非常好。您可能会认识到,一旦克服了从新框架开始的最初问题。
但是回到您的问题:
IWebHost
:Web主机是承载和运行Web应用程序的常规工具。它在您的应用程序启动时创建,然后将构造所有必要的部分,例如Kestrel Web服务器,应用程序中间件管道以及所有其他位,并将它们连接起来,以便您的应用程序准备好满足您的请求
基本上,Web主机是构成Web应用程序的东西。
IWebHostBuilder
:Web主机构建器基本上是创建Web主机的工厂。不仅可以构造Web主机,还可以配置Web主机确定如何运行Web应用程序所需的所有必需位。
使用ASP.NET Core 2,您通常会创建一个“默认Web主机生成器”,该默认主机已经具有很多默认值。例如,默认的Web主机将设置Kestrel Web服务器,启用和配置日志记录,并添加对appsettings.json
配置的支持。
通常,您的应用程序将始终从这样的默认Web主机启动,然后您可以使用Web Host构建器随后在实际构建Web Host之前对其进行配置。
BuildWebHost
是ASP.NET Core 2.1之前较旧约定的一部分,其中Program.cs
中的默认模式是使用单独的方法构建Web主机。在2.1版本中,此方法已更改,因此该方法将不再直接通过 build 构建Web主机,而仅通过 create 构建Web主机构建器(因此该方法现在称为{{1} }。因此,基本上,Web Host Builder上的CreateWebHostBuilder
调用已从该方法中重构出来。您可以在migration guide for 2.0 to 2.1上很好地看到这一点。
这样做的原因是使.Build()
可重用。该方法中发生的构建器配置基本上就是配置Web主机所需的所有内容。因此,通过使其可重复使用,而无需生成实际创建的Web主机,则可以将其用于其他目的。在这种情况下,此操作是使用CreateWebHostBuilder
进行集成测试的。测试主机基本上将在内部托管Web主机以进行集成测试,它会通过寻找TestHost
方法来实现。
现在,由于ASP.NET Core 2.1,您在CreateWebHostBuilder
中看到的默认模式如下(我添加了注释以进一步解释)
Program.cs
顺便说一句。官方文档的application startup和hosting部分通常介绍了此主题。