簡體   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