如何在ASP.Net Core中实现HTTP.sys Web服务器

ASP.Net Core是用于构建高性能Web应用程序的开源,跨平台,精益和模块化框架。 Kestrel是用于ASP.Net Core的跨平台Web服务器,默认情况下包含。 但是,它有局限性。

为了克服这些限制,我建议您使用HTTP.sys,这是基于Windows.HTTP内核驱动程序的Windows专用HTTP服务器,它更加成熟,安全和可扩展。

[ Microsoft .Net Core 2.0:您需要了解的一切 | 为什么.Net Core终于准备好迎接黄金时间了 | .Net Framework或.Net Core? 了解何时使用哪个 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

为什么要使用HTTP.sys

通常,当您必须将服务器暴露给没有IIS(Microsoft Internet信息服务)的外界时,需要HTTP.sys。 请求首先到达基于HTTP.sys内核模式驱动程序构建的HTTP.sys。 HTTP.sys依次根据请求为每个请求创建一个队列以及一个单独的应用程序池。

当您需要Kestrel不支持的功能时,也可以使用HTTP.sys。 HTTP.sys支持的功能包括:

  1. Windows验证
  2. 网络套接字
  3. 讯息分享
  4. HTTPS
  5. 响应缓存
  6. 直接文件传输

在HTTP.sys中启动项目

如果您运行的是Visual Studio 2017,请按照以下步骤创建ASP.Net Core Web API项目:

  1. 在Visual Studio IDE中,选择“文件”>“新建”>“项目”。
  2. 从显示的模板列表中选择ASP.Net Core Web应用程序(.Net Core)。
  3. 指定UsingHTTPSysInCode作为项目的名称。
  4. 单击确定保存项目。
  5. 在“新建.Net Core Web应用程序”窗口中选择API。
  6. 从顶部的下拉菜单中选择要使用的ASP.Net Core版本。
  7. 取消选中“启用Docker支持”并选择“无身份验证”,因为此处将不会使用其中任何一个。
  8. 单击确定。

这些步骤在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值