Skip to main content

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.sysKestrel有如下的优点:

  • 更好的性能和更好的内存管理
  • 跨平台
  • 更灵活,单独开发升级的分支
  • 可编程的端口和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

KestrelASP.net Core的默认实现,是一个跨平台的HTTP Server, 基于库libuv针对于`ASP.net Core应用,它提供了更好的性能以及内存利用。

这个服务的使用有两种方式:

  • 自己作为一个独立的服务,向用户提供服务:



  • 和反向代理服务一起使用

使用实例

我们给出一些快速的实例吧: