asp.net核心中Host和WebHost类之间的区别是什么

问题描述 投票:2回答:2

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

asp.net core 2.1 program.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 program.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?

c# asp.net-core asp.net-core-2.1 asp.net-core-3.0
2个回答
1
投票

主机负责应用程序的启动和生命周期管理。服务器负责接受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来构建主机。


0
投票

。NET Core 3.0与.NET Core 2.2代码中的区别是,.NET Core 3.0使用Generic Host,而.NET Core 2.2使用Web Host用于Web应用程序。通用主机已包含在ASP.NET CORE 2.1中,并成为.NET Core未来版本的实际标准。虽然通用主机已包含在.NET core 2.1中,但仅用于非HTTP工作负载。在.NET Core 3.0中,它已成为通用标准(HTTP +非HTTP工作负载)。

之所以从WebHost构建器转向更通用的Host构建器,是因为WebHost构建器与HTTP请求的联系更多,并且对于Web应用程序运行良好,但是随着微服务和Docker的出现,它感到需要一种更通用的Web主机,因此.NET Core团队对其进行了改进,使其也可与控制台应用程序一起使用。使用通用主机,可以使用控制台应用程序中的日志记录,配置和DI库

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

使用ConfigureWebHostDefaults

的原因是新的主机生成器是通用主机生成器,因此务必要告知我们我们打算为Web主机配置默认设置。
© www.soinside.com 2019 - 2024. All rights reserved.