Asp.net core IWebHost WebHostBuilder和BuildWebHost之间有什么区别

Asp.net core IWebHost WebHostBuilder和BuildWebHost之间有什么区别,asp.net-core,asp.net-core-2.0,Asp.net Core,Asp.net Core 2.0,在阅读了微软的文档之后,我仍然感到困惑。我需要将我开发的.net core 2 web应用程序部署到IIS服务器,但我无法得到任何直接的答案。这只是我问题的开始 IWebHost、WebHostBuilder和BuildWebHost之间的区别是什么 谢谢 首先,让我从这一点开始,我非常不同意你的说法:ASP.NET Core上的文档实际上非常好。是的,它可能仍然缺少一些细节,而且它也有一些问题,无法跟上发行版的变化,但是总的来说,内容非常好,开发团队做得非常出色。为这样一个大型且快速移动的框架

在阅读了微软的文档之后,我仍然感到困惑。我需要将我开发的.net core 2 web应用程序部署到IIS服务器,但我无法得到任何直接的答案。这只是我问题的开始

IWebHost、WebHostBuilder和BuildWebHost之间的区别是什么


谢谢

首先,让我从这一点开始,我非常不同意你的说法:ASP.NET Core上的文档实际上非常好。是的,它可能仍然缺少一些细节,而且它也有一些问题,无法跟上发行版的变化,但是总的来说,内容非常好,开发团队做得非常出色。为这样一个大型且快速移动的框架编写文档非常困难,而且您通过文档获得的信息量实际上非常好。您可能会认识到,一旦您在开始使用新框架时克服了最初的问题

回到你的问题上来:

  • :web主机是承载和运行web应用程序的通用设备。它是在应用程序启动时创建的,然后它将构建所有必要的部分,如Kestrel web服务器、应用程序中间件管道和所有其他部分,并将它们连接起来,以便应用程序准备好为您的请求提供服务

    web主机基本上是组成web应用程序的东西

  • :web主机生成器基本上是创建web主机的工厂。它不仅构造web主机,而且还配置web主机决定如何运行web应用程序所需的所有必要信息

    在ASP.NETCore2中,您通常会创建一个“默认web主机生成器”,它已经带有很多默认值。例如,默认web主机将设置Kestrel web服务器,启用和配置日志记录,并添加对
    appsettings.json
    配置的支持

    通常,您的应用程序总是从这样一个默认的web主机开始,然后在实际构建web主机之前,您只需使用web主机生成器来配置该web主机

  • BuildWebHost
    是ASP.NET Core 2.1之前的旧约定的一部分,
    Program.cs
    中的默认模式是以单独的方法构建web主机。在2.1中,这一点被更改,因此该方法不再直接构建web主机,而只是创建web主机生成器(因此该方法现在被称为
    CreateWebHostBuilder
    )。因此,web主机生成器上的
    .Build()
    调用基本上是从该方法中重构出来的。你可以很好地在照片中看到这一点

    这样做的原因是为了使
    CreateWebHostBuilder
    可重用。该方法中发生的构建器配置基本上就是配置web主机所需的一切。因此,通过使其可重用,而不生成实际创建的web主机,它可以用于其他目的。在本例中,这是使用
    TestHost
    进行集成测试的。测试主机基本上会在内部为您的集成测试托管web主机,它会通过查找
    CreateWebHostBuilder
    方法来实现

对于ASP.NET Core 2.1,您在
Program.cs
中看到的默认模式如下(我添加了注释以进一步解释):

公共类程序
{
//应用程序的主要入口点
公共静态void Main(字符串[]args)
{
//创建web主机生成器
CreateWebHostBuilder(args)
//构建web主机
.Build()
//并运行web主机,即您的web应用程序
.Run();
}
公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
//使用默认设置和配置创建默认web主机生成器
WebHost.CreateDefaultBuilder(args)
//将其配置为使用“Startup”类
.UseStartup();
}
顺便说一句,这个主题通常在官方文件的和章节中介绍

ASP.NET Core 3.x 从ASP.NET Core 3.0开始,我上面描述的设置发生了变化。其原因是。“通用主机”是web主机和web主机生成器的泛化,以允许ASP.NET Core之外的非web场景,使ASP.NET Core本身只是一个在通用主机上运行的“托管服务”

  • :主机是承载和运行应用程序及其服务的组件。这是以前的IWebHost的概括,但基本上完成了相同的任务:它启动配置的托管服务,并确保您的应用程序正在运行和工作

  • :主机生成器构造主机并配置各种服务。这是对先前的
    IWebHostBuilder
    的概括,但也基本上对generic
    IHost
    做了同样的事情。它在应用程序启动之前配置主机

    有一种方法可以设置具有各种默认值的主机,例如使用
    appsettings.json
    和日志进行配置

  • :托管服务是主机托管的中心组件。最常见的示例是ASP.NET核心服务器,它作为一个托管服务实现在通用主机之上

    您还可以编写自己的托管服务,或者添加第三方服务,使您能够很好地将内容添加到应用程序中

ASP.NET Core 3.0和.NET Core 3.0引入的通用主机基本上取代了以前的
IWebHost
IWebHostBuilder
。它遵循相同的体系结构和思想,但只是简化为非web任务,以便能够与