ASP.Net Core是用于构建高性能Web应用程序的开源,跨平台,精益和模块化框架。 Kestrel是用于ASP.Net Core的跨平台Web服务器,默认情况下包含。 但是,它有局限性。
为了克服这些限制,我建议您使用HTTP.sys,这是基于Windows.HTTP内核驱动程序的Windows专用HTTP服务器,它更加成熟,安全和可扩展。
为什么要使用HTTP.sys
通常,当您必须将服务器暴露给没有IIS(Microsoft Internet信息服务)的外界时,需要HTTP.sys。 请求首先到达基于HTTP.sys内核模式驱动程序构建的HTTP.sys。 HTTP.sys依次根据请求为每个请求创建一个队列以及一个单独的应用程序池。
当您需要Kestrel不支持的功能时,也可以使用HTTP.sys。 HTTP.sys支持的功能包括:
- Windows验证
- 网络套接字
- 讯息分享
- HTTPS
- 响应缓存
- 直接文件传输
在HTTP.sys中启动项目
如果您运行的是Visual Studio 2017,请按照以下步骤创建ASP.Net Core Web API项目:
- 在Visual Studio IDE中,选择“文件”>“新建”>“项目”。
- 从显示的模板列表中选择ASP.Net Core Web应用程序(.Net Core)。
- 指定UsingHTTPSysInCode作为项目的名称。
- 单击确定保存项目。
- 在“新建.Net Core Web应用程序”窗口中选择API。
- 从顶部的下拉菜单中选择要使用的ASP.Net Core版本。
- 取消选中“启用Docker支持”并选择“无身份验证”,因为此处将不会使用其中任何一个。
- 单击确定。
这些步骤在Visual Studio 2017中创建一个新的ASP.Net Core项目,名为UsingHTTPSysInCode。
为HTTP.sys配置ASP.net Core应用程序
接下来,您应该安装所需的软件包。 最好的方法是通过NuGet程序包管理器安装Microsoft.AspNetCore.All元程序包。 这样可确保一次性安装所有必需的软件包。
然后在您的项目中打开Program.cs文件。 它看起来应该像这样:
public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>(); }
安装了程序包后,通过Program.cs文件中Program类的Main方法中的WebHostBuilder的UseHttpSys扩展方法配置HTTP.sys服务器。 就是这样:
public static void Main(string[] args) { CreateWebHostBuilder(args).Run(); } public static IWebHost CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.AllowAnonymous = true; options.MaxConnections = 100; options.MaxRequestBodySize = 1000000; options.UrlPrefixes.Add("http://localhost:5000"); }) .Build();
这是Program类的完整源代码:
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Server.HttpSys; namespace UsingHTTPSysInCode { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Run(); } public static IWebHost CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseHttpSys(options => { options.Authentication.Schemes = AuthenticationSchemes.None; options.Authentication.AllowAnonymous = true; options.MaxConnections = 100; options.MaxRequestBodySize = 1000000; options.UrlPrefixes.Add("http://localhost:5000"); }) .Build(); } }
最后,在运行应用程序时,请确保您选择了适当的启动配置文件。 默认启动配置文件是Visual Studio中的IIS。 在此示例中,选择UsingHTTPSysInCode。 它与项目名称以及名称空间相同。
当您使用启动配置文件使用UsingHTTPSysInCode运行应用程序时,将打开一个控制台窗口以显示正在执行的一系列步骤,然后您将在Web浏览器中看到ValuesController的Get方法的输出(假设是默认控制器)。
From: https://www.infoworld.com/article/3293400/how-to-implement-httpsys-web-server-in-aspnet-core.html