首页 > 其他分享 >NET中三种主机简单理解

NET中三种主机简单理解

时间:2024-04-23 20:23:01浏览次数:22  
标签:Core Web 主机 配置 应用程序 三种 NET

在NET中有三个不同的主机:

  • .NET WebApplication 主机,也称为最小主机。

这是.NET 6中的一个新特性,旨在提供最小的启动时间和内存消耗。最小主机只包括.NET运行时的最基本组件和依赖项,因此启动时间非常快,内存消耗也非常低。最小主机适用于只需要最少.NET运行时支持的应用程序,例如控制台应用程序和小型服务。

通过WebApplication 类调用CreateBuilder方法创建WebApplicationBuilder对象,调用Build方法配置主机、添加服务、 IHost 实例,调用Run方法运行Host

  • .NET 通用主机

通用主机是.NET Core中的一种主机类型,可以用于各种.NET应用程序类型,包括ASP.NET Core Web应用程序、控制台应用程序和Windows服务等。通用主机包含.NET运行时的完整版本,启动时间和内存消耗相对较高,但具有更强的灵活性和适应性。通用主机可以在启动时加载不同的应用程序托管模型,并提供更丰富的配置选项和生命周期管理功能。

通过Host类调用CreateDefaultBuilder方法创建HostBuilder 对象创建 IHost 实例,调用Run方法运行

  • ASP.NET Core Web 主机

用于运行基于ASP.NET Core的Web应用程序。它能够处理HTTP请求,并将其路由到相应的控制器、动作和视图等Web应用程序组件。

通过WebHost类调用 CreateDefaultBuilder方法创建WebHostBuilder对象,调用Run方法运行

相同点:

三种主机都提供了应用程序的托管和生命周期管理能力。

三种主机模型都是基于托管的.NET 运行时(CLR/.NET Core)构建的。

它们都支持使用依赖注入(DI)来管理应用程序的依赖关系。

它们都支持配置文件和环境变量来配置应用程序的行为。

它们都可以与不同的中间件和扩展集成,以满足特定应用程序的需求。

1. 最小主机创建代码和流程图

官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/minimal-apis/webapplication?view=aspnetcore-7.0

var builder = WebApplication.CreateBuilder(args);

var app = builder.Build();

app.MapGet("/", () => "Hello World!");

app.Run();
View Code

 

 

 

CreateBuilder方法源码:https://source.dot.net/#Microsoft.AspNetCore/WebApplication.cs,77d59c0a99dedcf9,references

Build方法源码:https://source.dot.net/#Microsoft.AspNetCore/WebApplicationBuilder.cs,06eb5ff86e015ba3,references

Run方法源码:https://source.dot.net/#Microsoft.AspNetCore/WebApplication.cs,a01dc35d221adf28,references

官方文档摘要:

WebApplication 根据某些条件自动添加以下中间件:

 当 HostingEnvironment 为 "Development" 时,将首先添加 UseDeveloperExceptionPage。

如果用户代码尚未调用 UseRouting 并且配置了终结点(例如 app.MapGet),则其次添加 UseRouting。

如果配置了任何终结点,则会在中间件管道的末尾添加 UseEndpoints。

如果在服务提供程序中可以检测到 IAuthenticationSchemeProvider,则会在 UseRouting 后立即添加 UseAuthentication。 使用 AddAuthentication 时,默认情况下会添加 IAuthenticationSchemeProvider,并使用 IServiceProviderIsService 检测服务。

如果在服务提供程序中可以检测到 IAuthorizationHandlerProvider,则接下来添加 UseAuthorization。 使用 AddAuthorization 时,默认情况下会添加 IAuthorizationHandlerProvider,并使用 IServiceProviderIsService 检测服务。

在 UseRouting 和 UseEndpoints 之间添加用户配置的中间件和终结点。

通用主机创建代码

官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/host/generic-host?view=aspnetcore-7.0

await Host.CreateDefaultBuilder(args)

 .ConfigureServices(services =>

 {

 services.AddHostedService<SampleHostedService>();

 })

 .Build()

 .RunAsync();
View Code

对于 HTTP 工作负载,在 CreateDefaultBuilder 之后调用 ConfigureWebHostDefaults:

await Host.CreateDefaultBuilder(args)

 .ConfigureWebHostDefaults(webBuilder =>

 {

 webBuilder.UseStartup<Startup>();

 })

 .Build()

 .RunAsync();
View Code

CreateDefaultBuilder方法源码:https://source.dot.net/#Microsoft.Extensions.Hosting/Host.cs,57374a8a9c12f043,references

ConfigureServices方法源码:https://source.dot.net/#Microsoft.Extensions.Hosting/HostBuilder.cs,857da125f73c1248,references

ConfigureWebHostDefaults方法源码:https://source.dot.net/#Microsoft.AspNetCore/GenericHostBuilderExtensions.cs,c2654623b64e92e3,references

NET主机讲解:https://www.cnblogs.com/xiaoxiaotank/p/15273093.html

`ConfigureServices` 和 `ConfigureWebHostDefaults` 都是 ASP.NET Core 中用于配置和构建 Web 主机的方法,但它们的作用和使用方式有一些区别和相同点。

相同点:

1. 都是用于配置和构建 Web 主机。它们都提供了一种方式来定义和设置应用程序的不同方面,例如中间件、服务、路由等。

2. 都是在 ASP.NET Core 应用程序的启动过程中被调用。它们在 Web 主机构建的过程中起到关键作用,用于定义应用程序的行为和功能。

区别:

1. `ConfigureServices` 方法是用于配置应用程序的服务容器(Service Container),它用于注册和配置应用程序所需的依赖关系和服务。通常在这个方法中,您可以添加和配置各种服务,例如数据库上下文、身份验证服务、日志服务等。

 示例:

 public void ConfigureServices(IServiceCollection services)

 {

 services.AddDbContext<MyDbContext>();

 services.AddAuthentication();

 services.AddLogging();

 // 添加其他服务和依赖关系

 }
View Code

2. `ConfigureWebHostDefaults` 方法是用于配置 WebHostBuilder,它用于构建 Web 主机并设置应用程序的行为和功能。通常在这个方法中,您可以添加中间件组件、配置路由、设置静态文件服务等。

 示例:

public void Configure(IApplicationBuilder app)

 {

 app.UseRouting();

 app.UseAuthentication();

 app.UseAuthorization();

 // 添加其他中间件和配置

 }

3. `ConfigureServices` 方法在 Web 主机的构建过程中较早调用,用于配置服务容器。而 `ConfigureWebHostDefaults` 方法在 `ConfigureServices` 方法之后被调用,用于配置 Web 主机的行为。

综上所述,`ConfigureServices` 方法用于注册和配置应用程序的服务,而 `ConfigureWebHostDefaults` 方法用于配置 Web 主机的行为和功能。它们在应用程序启动过程中的执行顺序是 `ConfigureServices` 先于 `ConfigureWebHostDefaults`。

ASP.NET Core Web 主机创建代码和流程图

官方文档:https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/host/web-host?view=aspnetcore-7.0

public class Program
{
 public static void Main(string[] args)
 {

 CreateWebHostBuilder(args).Build().Run();
 }

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

CreateDefaultBuilder方法源码:https://source.dot.net/#Microsoft.AspNetCore/WebHost.cs,466deb0927717f4d,references

UseStartup方法源码:https://source.dot.net/#Microsoft.AspNetCore.Hosting/WebHostBuilderExtensions.cs,f7d4fb6cc448355e,references

WebHostBuilder、HostBuilder、WebApplicationBuilder三者之间的关系

在 .NET 中,WebHostBuilder、HostBuilder 和 WebApplicationBuilder 是用于构建和配置应用程序主机的不同类型的构建器。

WebHostBuilder

 是用于构建 ASP.NET Core Web 应用程序的主机。它提供了配置 Web 服务器、加载应用程序配置、设置日志记录和启动应用程序的功能。WebHostBuilder 是在使用传统的 ASP.NET Core Web 应用程序模型时使用的。

HostBuilder

 是一个通用的构建器,用于构建和配置通用的 .NET 主机。它适用于构建各种类型的应用程序,包括控制台应用程序、后台服务、ASP.NET Core Web 应用程序等。HostBuilder 提供了配置应用程序的主要功能,例如加载配置、设置依赖注入容器、配置日志记录和启动应用程序。

WebApplicationBuilder

 是在 ASP.NET Core 6 中引入的新的构建器,它是 WebHostBuilder 的替代品。WebApplicationBuilder 提供了更简化的 API 和更直观的方式来构建和配置 ASP.NET Core Web 应用程序。它内置了一些常用的默认配置,并提供了更灵活的扩展性。使用 WebApplicationBuilder 可以更轻松地设置服务器、配置中间件管道、加载应用程序配置等。

综上所述,WebHostBuilder 用于构建 ASP.NET Core Web 应用程序的主机,HostBuilder 是一个通用的构建器,适用于各种类型的应用程序,而 WebApplicationBuilder 是 ASP.NET Core 6 中用于构建 Web 应用程序的新的更简化的构建器。

 

标签:Core,Web,主机,配置,应用程序,三种,NET
From: https://www.cnblogs.com/chumochen/p/17481992.html

相关文章

  • .net 获取路径(总结)
    以下汇总了.NET(包括ASP.NET/WinForm等)获取当前路径的各种方法//获取当前进程的完整路径,包含文件名(进程名)。stringstr=this.GetType().Assembly.Location;result:X:\xxx\xxx\xxx.exe(.exe文件所在的目录+.exe文件名)//获取新的Process组件并将其与当前活动的进程......
  • 联通为客户提供运营商级机房环境存放主机设备及运维管理
    中国联通主机托管服务是面向企业和个人客户的一项专业级数据中心服务。该服务致力于为客户提供一个安全、稳定、高效的运营商级机房环境,用于存放主机设备,并提供全方位的运维管理。服务内容机房环境提供:提供专业级的运营商机房,确保设备运行环境的安全与稳定。机房采用先进的......
  • PROFINET IO应用层数据结构
    从远古时代讲起在300/400的年代,SIMATIC模块要提供一些特定的信息的方法是将特定信息保存到SSL里,通过查询的方法获得。SSL中文名叫做系统状态列表,帮助里面有些时候有写成SZL,不过都是一样的东西。在Step7中使用SFC51(RDSYSST),SFB54(RALRM)来获取SSL和报告系统错误,具体的record......
  • C#S7.NET实现西门子PLCDB块数据采集的完整步骤
    前言本文介绍了如何使用S7.NET库实现对西门子PLCDB块数据的读写,记录了使用计算机仿真,模拟PLC,自至完成测试的详细流程,并重点介绍了在这个过程中的易错点,供参考。 用到的软件:1.Windows环境下链路层网络访问的行业标准工具(WinPcap_4_1_3.exe)下载链接:https://www.winpcap.org/in......
  • .net 连接数据库sql-server 基础入门
    usingSystem.Data;usingSystem.Data.SqlClient;classPranson(){publicstaticvoidMain(){//创建数据库链接对象stringconnString="Server=.;DataBase=CourseManageDB;Uid=sa;Pwd=123456";SqlConnectionconn=newSqlConn......
  • Advanced .Net Debugging 1:你必须知道的调试工具
    Advanced.NetDebugging1:你必须知道的调试工具合集-Net高级调试(基于原著)(7) 1.Advanced.NetDebugging1:你必须知道的调试工具01-242.Advanced.NetDebugging2:CLR基础02-273.Advanced.NetDebugging3:基本调试任务(调试目标、符号、控制调试目标执行和设置断点)03-04......
  • Advanced .Net Debugging 7:托管堆与垃圾收集
    一、简介这是我的《Advanced.NetDebugging》这个系列的第七篇文章。这篇文章的内容是原书的第二部分的【调试实战】的第五章,这一章主要讲的是从根本上认识托管堆和垃圾回收。软件系统的内存管理方式有两种,第一种是手动管理内存,这种方式容易产生一些问题产生,比如:悬空指针......
  • .Net WebAPI程序集成CAS单点登录-API方式(不使用DotNetCasClient)
    以下是ashx一般处理程序的示例,且cas登录单独放到了一个按钮中:1、登录按钮(js)- console.log("cos登录");varoriginStr=window.location.origin;window.location.href="https://cas.your.com/cas/login?service="+originStr+"/WebUI/Admin......
  • NETCORE - 全局异常处理(Exception)
    NETCORE-全局异常处理(Exception)环境:.net6创建异常中间件:ExceptionHandlingMiddleware.csusingMicrosoft.AspNetCore.Http;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Net;usingSystem.Text;usingSystem.Text.Json;usingSyst......
  • 界面组件DevExpress Blazor UI v23.2 - 支持.NET 8、全新的项目模版
    DevExpress BlazorUI组件使用了C#为BlazorServer和BlazorWebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生BlazorUI组件(包括PivotGrid、调度程序、图表、数据编辑器和报表等)。DevExpress Blazor控件目前已经升级到v23.2版本了,新版本正式支持.NET8、拥......