ASP.NET Core 与传统 ASP.NET 的启动与执行流程的区别
传统 ASP.NET(基于 .NET Framework)启动和执行流程
启动流程
- IIS 启动与配置加载
- 当服务器启动时,IIS 服务会随之启动。IIS 读取其配置文件(如 web.config),加载网站和应用程序池的配置信息。
- 应用程序池启动
- 根据配置,IIS 为每个应用程序池创建对应的 w3wp.exe 进程实例。每个应用程序池可以运行一个或多个 ASP.NET 应用程序。
- CLR 加载
- w3wp.exe 进程启动后,根据应用程序所使用的 .NET Framework 版本,加载相应版本的 CLR 到自己的进程空间中。例如,对于使用 .NET Framework 4.0 的应用程序,加载 CLR 4.0。
- ASP.NET 应用程序初始化
- CLR 加载 ASP.NET 应用程序的程序集和相关配置文件。ASP.NET 运行时执行应用程序的初始化代码,如 Global.asax 中的 Application_Start 方法,进行一些全局的初始化操作,如数据库连接池的初始化、缓存的预热等。
执行流程
- 请求接收
- 客户端(如浏览器)向 IIS 发送 HTTP 请求,请求到达 IIS 监听的端口(通常是 80 或 443)。
- IIS 路由请求
- IIS 根据请求的 URL 和配置信息,判断该请求属于哪个应用程序池,并将请求路由到相应的 w3wp.exe 进程。
- 请求处理
- w3wp.exe 进程中的 CLR 接收请求,根据请求的 URL 映射到相应的 ASPX 页面、ASHX 处理程序或其他资源。CLR 执行页面或处理程序的代码,可能会访问数据库、调用业务逻辑层的方法等。
- 响应生成与返回
- 代码执行完成后,生成响应数据(如 HTML 页面、JSON 数据等)。响应数据从 CLR 返回到 w3wp.exe 进程,再由 w3wp.exe 通过 IIS 发送回客户端。
ASP.NET Core 启动和执行流程
启动流程
- 应用程序启动
- 当运行 ASP.NET Core 应用程序时,操作系统加载相应版本的 .NET 运行时(包含 CLR)。应用程序的入口点(通常是 Program.cs 文件中的 Main 方法)开始执行。
- 主机构建与配置
- 使用 WebApplication.CreateBuilder(.NET 6+)或 Host.CreateDefaultBuilder(.NET 5 及以前)构建主机,配置应用程序的服务、中间件、配置源等。
- Kestrel 服务器启动
- 主机启动过程中,Kestrel 服务器被初始化并开始监听指定的端口。Kestrel 是 ASP.NET Core 自带的跨平台高性能 Web 服务器,基于底层网络 API 构建。
- 应用程序初始化
- 执行应用程序的初始化逻辑,如注册路由、配置中间件等。
执行流程
- IIS 接收请求(若使用 IIS 作为反向代理)
- IIS 监听公网或局域网的标准 HTTP(80)或 HTTPS(443)端口,接收来自客户端的 HTTP 请求。
- 请求转发
- IIS 通过 ASP.NET Core 模块(ANCM)将请求转发到 Kestrel 监听的端口上。ANCM 负责进程管理和请求传递。
- Kestrel 处理请求
- Kestrel 接收到请求后,将请求传递给 ASP.NET Core 应用程序。应用程序的中间件管道依次处理请求,根据路由规则将请求映射到相应的控制器和操作方法。
- 响应生成与返回
- 控制器和操作方法处理请求,生成响应数据。响应数据从 Kestrel 返回给 IIS,最后由 IIS 将响应发送回客户端。
区别总结
- 服务器架构
- 传统 ASP.NET:IIS 与 w3wp.exe 紧密集成,w3wp.exe 加载 CLR 来运行应用程序,IIS 深度参与请求处理过程。
- ASP.NET Core:IIS 通常作为反向代理服务器,将请求转发给 Kestrel 服务器处理。Kestrel 是独立的 Web 服务器,负责实际的请求处理和响应生成。
- 跨平台性
- 传统 ASP.NET:依赖于 Windows 操作系统和特定版本的 .NET Framework,只能在 Windows 环境下运行。
- ASP.NET Core:具有跨平台特性,可以在 Windows、Linux、macOS 等多种操作系统上运行,因为 Kestrel 是跨平台的服务器。
- 启动和配置方式
- 传统 ASP.NET:启动依赖于 IIS 的配置和 w3wp.exe 进程的创建,配置主要通过 IIS 管理器和 web.config 文件完成。
- ASP.NET Core:启动通过应用程序代码进行配置,使用 WebApplication.CreateBuilder 或 Host.CreateDefaultBuilder 构建主机,配置更加灵活和代码化。
- 性能和扩展性
- 传统 ASP.NET:在高并发场景下性能可能受到限制,扩展性相对较差,因为依赖于 IIS 的特定实现。
- ASP.NET Core:Kestrel 服务器具有高性能和良好的扩展性,采用异步 I/O 操作和事件驱动模型,能够更好地处理高并发请求。
posted on 2025-02-05 14:10 HutatsuiwaKaede 阅读(7) 评论(0) 编辑 收藏 举报