ASP.net core 跨平台原理分析
.NET 框架未来发展

.ASP.NET Core 跨平台运行时

ASP.net core 依赖注入代码分析
- 通过
CreateHostBuilder(args) 方法,创建了一个 HostBuilder 对象,基于建造者模式,
复杂对象创建经常使用的方法。
- 通过
Build() 方法调用 Startup 类中的 ConfigureServices() 方法,这个方法传递了一个服务容器,
并且注册了各种服务。
-
同时包括 Host 对象的创建,当然最核心的还有一个内置的 WebServer 对象。
-
通过 Run 方法启动和运行 Host 主机(宿主),通过 Configure() 方法配置中间管道,开始监听和接受
http 请求。
public static void Main(string[] args)
{
IHostBuilder hostBuilder= CreateHostBuilder(args);
IHost host = hostBuilder.Build();
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
IIS 托管设计

-
ASP.NET 应用程序都是托管到(w3wp.exe)进程中,也就是应用程序池。
-
当 HTTP 请求到来时,IIS 的 HttpRuntime 接受请求,并派发到对应的应用程序池和对应的托管站点
-
以上这些全部都是 IIS 内部完成的。
问题: IIS 从接受请求开始到响应的返回,包揽了一切,并且 IIS 只有 Windows 系统才能使用。所以,无法实现跨平台
ASP.NET Core 与 IIS 的关系
IIS 上部署 ASP.NET Core
-
安装 IIS
-
安装 NetCore Runtime,或者安装对应的 SDK,SDK 包括 Runtime
-
安装服务器主机绑定程序 Hosting, 这个程序会嵌套到 IIS 的 Moudle中,这个组件只能在 IIS 中使用。

.NetCore 变化要点
-
运行的位置:AspNetCore 程序不是运行在 IIS 工作进程中,而是独立的在控制台程序中运行了 Kestrel Web 服务组件。
-
启动的方式:Kestrel 服务是通过 dotnet 运行时命令调用的,也就是我们通过控制台启动的,就是这个服务器。
-
作用:AspNetCore Moudle 这个组件只是将请求转发到 Kestrel 内网服务器中并具体处理请求。
结论:.NETCore 跨平台的原因就是因为内置了 Kestrel 服务器,而不再依赖于 IIS 托管。
ASP.NET Core 请求流程

反向代理服务器
-
根据客户端请求,访问防火墙后面的 web 服务器资源,并返回给客户端。
-
客户端只知道反向代理的 IP 地址,并不知道真实的 Web 服务器地址。
-
反向代理可以为后台服务器提供负载均衡,或缓冲服务器。
Kestrel 服务器内部究竟做了什么?需要源码分析。
总结
AspNetCore 是强大的控制台程序
证明:可以通过控制台启动
好处:是实现跨平台的核心
在 IIS 上面部署 AspNetCore 项目
要求:需要安装 Hosting 绑定模块 AspNetCoreModuleV2,并且无需托管。
作用:反向代理,用来转发请求,IIS 和转发模块,应用程序的关系更加清楚。
IIS 反向代理与 Kestrel 内置服务器
应用:反向代理服务器在 Windows 使用是 IIS,在 Linux 上使用 Nginx等。
好处:轻松实现了跨平台部署。
ASP.net core跨平台原理分析.NET框架未来发展.ASP.NET Core跨平台运行时ASP.net core依赖注入代码分析CreateHostBuilder(args)方法,创建了一个HostBuilder对象,基于建造者模式,复杂对象创建经常使用的方法。
Build()方法调用Startup类中的ConfigureServices()方法,这个方法传递了一个服务容器,并且注册了各种服务。
同时包括
Host对象的创建,当然最核心的还有一个内置的WebServer对象。通过
Run方法启动和运行Host主机(宿主),通过Configure()方法配置中间管道,开始监听和接受http请求。IIS托管设计ASP.NET应用程序都是托管到(w3wp.exe)进程中,也就是应用程序池。当
HTTP请求到来时,IIS的HttpRuntime接受请求,并派发到对应的应用程序池和对应的托管站点以上这些全部都是
IIS内部完成的。问题:
IIS从接受请求开始到响应的返回,包揽了一切,并且IIS只有Windows系统才能使用。所以,无法实现跨平台ASP.NET Core与IIS的关系IIS上部署ASP.NET Core安装
IIS安装
NetCore Runtime,或者安装对应的SDK,SDK包括Runtime安装服务器主机绑定程序
Hosting, 这个程序会嵌套到IIS的Moudle中,这个组件只能在IIS中使用。.NetCore变化要点运行的位置:
AspNetCore程序不是运行在IIS工作进程中,而是独立的在控制台程序中运行了Kestrel Web服务组件。启动的方式:
Kestrel服务是通过dotnet运行时命令调用的,也就是我们通过控制台启动的,就是这个服务器。作用:
AspNetCore Moudle这个组件只是将请求转发到Kestrel内网服务器中并具体处理请求。结论:
.NETCore跨平台的原因就是因为内置了Kestrel服务器,而不再依赖于IIS托管。ASP.NET Core请求流程反向代理服务器
根据客户端请求,访问防火墙后面的
web服务器资源,并返回给客户端。客户端只知道反向代理的
IP地址,并不知道真实的Web服务器地址。反向代理可以为后台服务器提供负载均衡,或缓冲服务器。
Kestrel服务器内部究竟做了什么?需要源码分析。总结
AspNetCore是强大的控制台程序证明:可以通过控制台启动
好处:是实现跨平台的核心
在
IIS上面部署AspNetCore项目要求:需要安装
Hosting绑定模块AspNetCoreModuleV2,并且无需托管。作用:反向代理,用来转发请求,
IIS和转发模块,应用程序的关系更加清楚。IIS反向代理与Kestrel内置服务器应用:反向代理服务器在
Windows使用是IIS,在Linux上使用Nginx等。好处:轻松实现了跨平台部署。