Server实现
分类: Asp.net Core入门 ◆ 标签: #Asp.Net core基础 #基础 #Web ◆ 发布于: 2023-06-04 20:21:55

我们前面一章学习了.Net
的Host的设计和描述了怎么样基于Host
这个概念来开始一个ASP.net Core
的应用该如何配置,我们在这一章先回顾一下:
public class Program { 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
以上的版本的主要模板,我们从方法CreateHostBuilder
里可以看到两个最为重要的方法:
CreateDefaultBuilder
: 创建一个通用的Host
ConfigureWebHostDefaults
: 在这个通用的Host
上添加作为一个WebHost
所需要的特性。
注意到这些都是HostBuilder
的方法,所以如果我们需要增加一些扩展点,学习和了解HostBuilder
自带的方法是非常有必要的,例如配置应用的扩展点ConfigureAppConfiguration
, 配置日志的扩展点等等,更为具体的参考:
https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.ihostbuilder?view=dotnet-plat-ext-5.0
我们本章来学习ASP.net Core
中的web实现。
.net Core
以及现在的.Net 5
以及即将发布的.Net 6
目标是跨平台,实际上ASP.net Core
也是跨平台的产品,因此您编写的基于ASP.net Core
的应用也是可以部署在不同的平台上,这就需要ASP.net Core
有自己的web 服务实现。
目前ASP.net Core
在不同的平台上都可以通过基于Kestrel
运行的ASP.net Core
应用。但是不同的平台上有不同的配置,在Mac OX X
以及Linux
平台上,都可以选择基于Kestrel
单独运行的应用或者将其他Web服务器当成方向代理运行在Kestrel
之前来运行整个基于ASP.net Core
的应用。
不过在Windows
下, ASP.net Core有更多,更好的选择:
Kestrel
基于单独的服务,其他服务作为反向代理来运行。这个和Linux, Mac上一直。- 基于IIS服务器的in-process服务。
- 基于
HTTP.sys
的服务实现。
当运行在IIS或者IIS Express上时:
- in-process模式运行在IIS里。
- out-process 模式。
这两种情况,在IIS上都需要模块:ASP.net Core Module, in-process无需使用Kestrel
的服务实现,但是第二种需要。
Kerstrel VS. HTTP.sys
相对于Http.sys
, Kestrel
有如下的优点:
- 更好的性能和更好的内存管理
- 跨平台
- 更灵活,单独开发升级的分支
- 可编程的端口和TLS配置
- 更好的扩展性,例如支持
ppv2
协议等等。
Http.sys
作为windows
系统的共享内核组件,有着Kestrel
没有的很多特性:
- 共享端口
- 集成基于Windows的认证
- 更快的代理能力。
- 直接文件存取。
- 输出缓存。
Hosting Model
当使用in-process模式的时候,ASP.net Core的应用和IIS worker运行在同一个进程里,这样提供了更好的性能,因为out-process需要请求再次从loopback adapter 接口上绕一圈。所谓的loopback adapter 接口就是127.0.0.1这个网卡。
Kestrel
Kestrel
是ASP.net Core
的默认实现,是一个跨平台的HTTP Server, 基于库libuv
, 针对于`ASP.net Core应用,它提供了更好的性能以及内存利用。
这个服务的使用有两种方式:
- 自己作为一个独立的服务,向用户提供服务:
- 和反向代理服务一起使用
使用实例
我们给出一些快速的实例吧:
Kestrel
搭配Nginx
: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-nginx?view=aspnetcore-5.0Kestrel
搭配Apache
: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/linux-apache?view=aspnetcore-5.0