asp.net 核心中的 Host 和 WebHost class 有什么区别
What is the difference between Host and WebHost class in asp.net core
我试图将我的应用程序从 asp.net 核心 2.1 迁移到 3.0,并且在 program.cs 中出现了第一个建议更改以创建主机。
asp.net 核心 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核心3.0program.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 核心 3.0 中它正在创建 Host 而不是 WebHost 并在装箱 Host 时注入 WebHostBuilder。
但是我在这里不清楚 Host 和 WebHost 之间的区别是什么以及为什么 asp.net core 3.0 应用程序不允许创建 WebHost?
宿主负责应用启动和生命周期管理。服务器负责接受 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 构建主机。
.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 工作负载。 In.NET Core 3.0 成为通用标准(HTTP + 非 HTTP 工作负载)。
从 WebHost 构建器转向更通用的 Host 构建器的原因是 WebHost 构建器更多地与 HTTP 请求相关联并且适用于 Web 应用程序,但随着微服务的出现和 Docker 它感到有必要更通用的 Web 主机,因此 .NET Core 团队对其进行了改造,使其也可用于控制台应用程序。使用 Generic Host 可以在控制台应用程序中使用 日志记录、配置和 DI 库.
要创建主机,我们可以使用新的 HostBuilder,它具有与现有 WebHostBuilder.There 相似的一组方法和扩展,这是需要注意的一个主要区别,那就是 HostBuilder 不提供允许您像使用 WebHostBuilder 一样使用启动 class 的扩展方法。做出此决定主要是为了避免在幕后创建两个单独的 DI 容器。使用通用主机,配置单个服务集合,然后用于构建最终的服务提供者。
使用 ConfigureWebHostDefaults 的原因是新的主机构建器是一个通用主机构建器,所以重要的是要告诉我们我们打算配置 Web 主机的默认设置。
请参考微软推荐使用Generic Host的参考资料here
我试图将我的应用程序从 asp.net 核心 2.1 迁移到 3.0,并且在 program.cs 中出现了第一个建议更改以创建主机。
asp.net 核心 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核心3.0program.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 核心 3.0 中它正在创建 Host 而不是 WebHost 并在装箱 Host 时注入 WebHostBuilder。
但是我在这里不清楚 Host 和 WebHost 之间的区别是什么以及为什么 asp.net core 3.0 应用程序不允许创建 WebHost?
宿主负责应用启动和生命周期管理。服务器负责接受 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 构建主机。
.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 工作负载。 In.NET Core 3.0 成为通用标准(HTTP + 非 HTTP 工作负载)。
从 WebHost 构建器转向更通用的 Host 构建器的原因是 WebHost 构建器更多地与 HTTP 请求相关联并且适用于 Web 应用程序,但随着微服务的出现和 Docker 它感到有必要更通用的 Web 主机,因此 .NET Core 团队对其进行了改造,使其也可用于控制台应用程序。使用 Generic Host 可以在控制台应用程序中使用 日志记录、配置和 DI 库.
要创建主机,我们可以使用新的 HostBuilder,它具有与现有 WebHostBuilder.There 相似的一组方法和扩展,这是需要注意的一个主要区别,那就是 HostBuilder 不提供允许您像使用 WebHostBuilder 一样使用启动 class 的扩展方法。做出此决定主要是为了避免在幕后创建两个单独的 DI 容器。使用通用主机,配置单个服务集合,然后用于构建最终的服务提供者。
使用 ConfigureWebHostDefaults 的原因是新的主机构建器是一个通用主机构建器,所以重要的是要告诉我们我们打算配置 Web 主机的默认设置。
请参考微软推荐使用Generic Host的参考资料here