繁体   English   中英

asp.net core 中的 Host 和 WebHost 类有什么区别

[英]What is the difference between Host and WebHost class in asp.net core

我试图将我的应用程序从 asp.net core 2.1 迁移到 3.0,并且在 program.cs 中出现了第一个建议的更改以创建主机。

asp.net core 2.1 程序.cs

public static void Main(string[] args)
{
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
        .UseStartup<Startup>();

asp.net core 3.0 程序.cs

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

我可以看到,在 asp.net core 3.0 中,它正在创建 Host 而不是 WebHost 并在创建 Host 时注入 WebHostBuilder。

但是我在这里没有明确的想法 Host 和 WebHost 之间有什么区别以及为什么 asp.net core 3.0 应用程序不允许创建 WebHost?

在 .NET Core 3.0 与 .NET Core 2.2 代码中可以看到的区别在于 .NET Core 3.0 使用通用主机,而 .NET Core 2.2 使用Web 主机进行 Web 应用程序。 通用主机包含在 ASP.NET CORE 2.1 中,并成为 .NET Core 未来版本的事实上的标准。 尽管通用主机包含在 .NET core 2.1 中,但它仅用于非 HTTP 工作负载。 在 .NET Core 3.0 中,它成为通用标准(HTTP + 非 HTTP 工作负载)。

从 WebHost 构建器转向更通用的主机构建器的原因是因为 WebHost 构建器更多地与 HTTP 请求相关联并且适用于 Web 应用程序,但是随着微服务和 Docker 的出现,它觉得需要一个更通用的 Web 主机,因此 .NET核心团队对其进行了改造,使其也可用于控制台应用程序。 使用通用主机,可以在控制台应用程序中使用日志记录、配置和 DI 库

要创建主机,我们可以使用新的 HostBuilder,它具有与现有 WebHostBuilder 类似的一组方法和扩展。需要注意的一个主要区别是HostBuilder 不提供允许您使用的扩展方法一个启动类,我们可以使用 WebHostBuilder 这个决定主要是为了避免在幕后创建两个独立的 DI 容器的需要。 使用通用主机,配置单个服务集合,然后用于构建最终的服务提供者。

使用ConfigureWebHostDefaults 的原因是新的主机构建器是一个通用主机构建器,因此重要的是要告诉我们我们打算为 Web 主机配置默认设置。

请参阅 Microsoft 参考,该参考建议在此处使用 Generic Host

主机负责应用程序启动和生命周期管理。 服务器负责接受 HTTP 请求。 主机的部分职责包括确保应用程序的服务和服务器可用并正确配置。 您可以将主机视为服务器的包装器。 主机被配置为使用特定的服务器; 服务器不知道它的主机。

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace WebApplication1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .Build();

            host.Run();
        }
    }
}

您使用 WebHostBuilder 的实例创建主机。 这通常在应用程序的入口点完成:public static void Main。 一个典型的 Program.cs,如下所示,演示了如何使用 WebHostBuilder 来构建主机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM