Kestrel
Kestrel 是一个跨平台的适用于 ASP.NET Core 的 Web 服务器,默认包括在 ASP.NET Core 项目模板中。
Kestrel 支持以下方案:
- HTTPS
- 用于启用 WebSocket 的不透明升级
- 用于获得 Nginx 高性能的 Unix 套接字
- HTTP/2(除 macOS"text-align: center">
Kestrel 用于反向代理配置:
实例
为了看起来更加简单直接,这里我们使用VS Code新建一个ASP.NET Core的Web应用,并使用Kestrel作为服务器。
首先需要在计算机上安装.NET Core环境。这里可以查看 官网 。本例中使用的是.NET Core 3.1。
- 新建APS.NET Core Web应用
在一个目录下打开命令窗口,输入命令:
dotnet new webapp -o myapp
这样,就使用默认模板新建了一个项目。如果是首次安装使用.NET Core,还需要信任证书:
dotnet dev-certs https --trust
此时,这个项目可以直接运行:
cd myapp dotnet watch run
此时就是以内置的Kestrel作为服务器直接运行的。我们修改一下代码,查看一下运行时的进程,修改Pages/Index.cshtml如下:
@page @using System.Diagnostics @model IndexModel @{ ViewData["Title"] = "Home page"; } <div class="text-center"> <h1 class="display-4">Welcome</h1> <p> "@Process.GetCurrentProcess().ProcessName" </p> <p>Learn about <a href="https://docs.microsoft.com/aspnet/core" rel="external nofollow" >building Web apps with ASP.NET Core</a>.</p> </div>
运行程序我们看到:
此时的进程名称就是我们的应用名称。接下来我们以这个代码为基础,分别看看其他托管模式中的情况。
IIS
在IIS中托管ASP.NET Core应用需要ASP.NET Core 模块。
ASP.NET Core 模块是插入 IIS 管道的本机 IIS 模块,用于:
- 在 IIS 工作进程 (w3wp.exe) 内托管 ASP.NET Core 应用,称为进程内托管模型。
- 将 Web 请求转发到运行 Kestrel 服务器的后端 ASP.NET Core 应用,称为进程外托管模型。
在进程内托管时,该模块会使用 IIS 进程内服务器实现,即 IIS HTTP 服务器 (IISHttpServer)。
在进程外托管时,该模块仅适用于 Kestrel。 该模块无法与 HTTP.sys 一起工作。
进程内托管
ASP.NET Core 应用默认为进程内托管模型。在进程内托管时,使用 IIS HTTP 服务器 (IISHttpServer) 而不是 Kestrel 服务器。
实例
代码还是与之前相同的代码,首先将代码发布一下:
dotnet publish --configuration Release
接下来将publish文件夹中的文件托管到IIS中。
要在IIS中托管ASP.NET Core网站,首先要安装.NET Core 托管捆绑包安装程序 ,安装后重启电脑或在命令行中执行:
net stop was /y
之后执行:
net start w3svc
然后在IIS中新建网站,并将根目录指向上一步中的publish文件夹,浏览网站可以看到:
此时进程名称为:w3wp。这就是默认的进程内托管模式。
进程外托管
进程外托管使用 Kestrel 服务器,而不是 IIS HTTP 服务器 (IISHttpServer)。
若要配置进程外托管应用,请在项目文件 ( .csproj) 中将 属性的值设置为 OutOfProcess:
<PropertyGroup> <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel> </PropertyGroup>
Process.GetCurrentProcess().ProcessName 报告w3wp/iisexpress(进程内)或 dotnet(进程外)。
实例
修改myapp.csproj文件:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel> </PropertyGroup> <ItemGroup> </ItemGroup> </Project>
之后重新发布并部署到IIS,查看网站可以看到:
此时的进程名称为:dotnet,这是进程外托管模式。
HTTP.sys
如果 ASP.NET Core 应用在 Windows 上运行,则 HTTP.sys 是 Kestrel 的替代选项。 为了获得最佳性能,通常建议使用 Kestrel。
HTTP.sys仅能在Windows上运行,且不能与ASP.NET Core模块同时使用。在不想使用IIS或者需要使用Kestrel不具有的功能时可以使用HTTP.sys。
HTTP.sys 支持以下功能:
- Windows 身份验证
- 端口共享
- 具有 SNI 的 HTTPS
- 基于 TLS 的 HTTP/2(Windows 10 或更高版本)
- 直接文件传输
- 响应缓存
- WebSocket(Windows 8 或更高版本)
实例
修改代码Program.cs如下:
//using Microsoft.AspNetCore.Server.HttpSys; public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseHttpSys(options => { options.AllowSynchronousIO = true; options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.AllowAnonymous = true; options.MaxConnections = null; options.MaxRequestBodySize = 30000000; options.UrlPrefixes.Add("http://localhost:5005"); }); webBuilder.UseStartup<Startup>(); });
在命令行中输入运行应用。
dotnet watch run
此时就是以HTTP.sys方式托管,此时进程名也是myapp。
但是这种方式不能托管在IIS中,如果将发布的代码放到IIS中则会报错。
总结
综上所述,Kestrel是一个跨平台的服务器,HTTP.sys则只能用于Windows中。Kestrel与HTTP.sys都是嵌入在ASP.NET Core中的服务器,它们有点类似于SpringBoot中内嵌的Tomcat。
即使不使用额外的WEB服务器,例如IIS,Nginx,Apache等,项目最终生成的文件也可以直接运行,并提供HTTP服务,不过,一般推荐的形式是,使用Kestrel作为应用服务器,使用常用的WEB服务器(Nginx,Apache等)作为反向代理。
在IIS中,官方提供了ASP.NET Core模块,方便了将ASP.NET Core应用托管于IIS中,并提供了两种模式,其工作方式也类似于反向代理。在Windows中,对于某些Kestrel不支持的功能,则可以使用HTTP.sys。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 群星1995《摇滚中国乐势力》首版引进版[WAV+CUE][983M]
- 陈思安《32首酒廊情调》2CD新雅(国际)影碟[WAV+CUE]
- 齐豫潘越云《回声》K2HD[正版原抓WAV+CUE]
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]