原文地址:WebListener server for ASP.NET Core

By Tom Dykstra, Chris Ross

WebListener是一个只能运行在Windows上的ASP.NET Core web服务器,基于Http.Sys内核模块驱动构建。在不借助IIS作为反向代理服务器的情况下,WebListener可以替代Kestrel用来与直接与互联网相连。实际上,WebListener不能和IIS或IIS Express一起使用,这是因为它与ASP.NET Core模块并不兼容

尽管WebListener为ASP.NET Core而开发,它也可以经由Microsoft.Net.Http.Server NuGet 包而被任何.NET Core和.NET Framework应用所使用。

WebListener支持以下功能:

  • Windows Authentication
  • Port sharing
  • HTTPS with SNI
  • HTTP/2 over TLS (Windows 10)
  • Direct file transmission
  • Response caching
  • WebSockets (Windows 8)

支持的Windows版本:

  • Windows 7和Windows Server 2008 R2和更高版本

查看或下载示例代码

何时使用WebListener

当你需要将服务器直接暴露到互联网上并且不使用IIS部署时,WebListener会是一个有效的选择。

因为WebListener基于Http.Sys构建,它不会请求反向代理服务器防御攻击。对于防御多类攻击下和保证全功能服务器的健壮性,安全性以及可扩展性而言,Http.Sys是一种成熟的技术。IIS本身作为HTTP侦听器运行在Http.Sys之上。

在你需要某项只能由Weblistener提供而Kestrel不能支持的功能的时候,对于内部部署应用而言,它也是一个不错的选择。

如何使用WebListener

以下是对主机系统和你的ASP.NET Core应用设定任务的简要概述。

配置 Windows 服务器

  • 安装你的应用所需要的.NET 版本,如.NET Core或是.NET Framework 4.5.1。

  • 预注册URL前缀注册到WebListener,并建立SSL证书。

    如果你在Windows上没有预先注册URL前缀,你运行的应用必须具有管理员权限。唯一的例外是,如果你使用HTTP(不是HTTPS)前缀和大于1024的端口号绑定到本地主机,此种情况下不需要管理员权限。

    详细信息,请参考后文中的如何预注册前缀和配置SSL一节。

  • 打开防火墙端口以允许流量到达WebListener。

    你可以使用netsh.exe或是PowerShell cmdlets

关于Http.Sys registry settings的更多信息请点击相关链接

配置你的ASP.NET Core应用

public static int Main(string[] args)
{
Console.WriteLine("Running demo with WebListener."); var config = new ConfigurationBuilder()
.AddCommandLine(args)
.Build(); var builder = new WebHostBuilder()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseConfiguration(config)
.UseStartup<Startup>()
.UseWebListener(options =>
{
options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.None;
options.ListenerSettings.Authentication.AllowAnonymous = true;
}); var host = builder.Build();
host.Run(); return 0;
}
  • 配置URL和端口进行侦听

    默认的ASP.NET Core项目绑定http://localhost:5000。通过使用UseUrls扩展方法——编辑urls命令行参数,或者是通过ASP.NET Core配置系统,你可以为 WebListener 配置URL前缀和端口号。更多的信息,请参考Hosting

    WebListener使用Http.Sys前缀字符串格式,但是没有特定于它的前缀字符串格式要求。

Note

请确保你在UseUrls方法中指定的前缀字符串和你在服务器上预先注册的字符串是相同的。

  • 请确保你的应用未配置为运行IIS或IIS Express。

    在Visual Studio中,项目的默认启动配置服务器是IIS Express。为了能够在console应用中运行项目,你必须手动更改所选配置文件,如以下屏幕截图所示:

如何在ASP.NET Core之外运行WebListener

关于Http.Sys registry settings的更多信息请点击相关链接

以下是一个在ASP.NET Core之外演示使用WebListener的代码示例:

var settings = new WebListenerSettings();
settings.UrlPrefixes.Add("http://localhost:8080"); using (WebListener listener = new WebListener(settings))
{
listener.Start(); while (true)
{
var context = await listener.AcceptAsync();
byte[] bytes = Encoding.ASCII.GetBytes("Hello World: " + DateTime.Now);
context.Response.ContentLength = bytes.Length;
context.Response.ContentType = "text/plain"; await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
context.Dispose();
}
}

预注册URL前缀并配置SSL

IIS和WebListener都依赖于底层的Http.Sys内核模块驱动,用以监听请求,并做初步处理。在IIS中,图形化管理界面可以提供给你一个相对容易的方式去进行配置。但是如果你用的是WebListener,那么你需要自己使用内置工具netsh.exe去配置Http.Sys。

你需要使用netsh.exe工具完成的最常见任务是保留URL前缀和分配SSL证书。

对于初学者来说,NetSh.exe并不是一个简便的工具。以下示例展示了为80/443端口保留URL前缀所需的最少代码。

netsh http add urlacl url=http://+:80/ user=Users
netsh http add urlacl url=https://+:443/ user=Users

以下示例展示了如何分配SSL证书:

netsh http add sslcert ipport=0.0.0.0:443 certhash=MyCertHash_Here appid={00000000-0000-0000-0000-000000000000}".

以下是官方参考文档:

以下资源链接为多种情况提供了详细说明。引用文章HttpListener同样适用基于HTTP.SYS构建的WebListener

以下列出了一些比netsh.exe命令行工具更容易使用的第三方工具,虽然它们并没有被微软提供或认可。正如netsh.exe本身要求具备管理员权限,这些工具也默认如此。

  • HttpSysManager 提供了一个图形化界面用以侦听配置SSL证书和选项,前缀预定以及证书信任列表。

  • HttpConfig 可以列出或配置SSL证书和URL前缀。它的图形化界面比HttpSysManager更精细,并公开了更多的配置选项,除此以外,它也提供了和HttpSysManager相似的功能。HttpConfig不能创建新的证书信任列表(CTL),但是可以分配现有证书。

为了生成自签名的SSL证书,微软提供了以下命令行工具:MakeCert.exe和PowerShell cmdlet New-SelfSignedCertificate。它们同样有第三方的图形化界面以帮助生成自签名的SSL证书。

下一步

更多的信息,请参考以下资源:

ASP.NET Core WebListener 服务器的更多相关文章

  1. ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 1.1. 名词解释 1.2. Kestrel基本工作原理 1.2.1. Kestrel的基本架构 1.2.2. Ke ...

  2. [转帖]ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 https://www.cnblogs.com/vipyoumay/p/7525478.html ASP.NET C ...

  3. ASP.NET Core Web服务器

    一.Http.sys HTTP.sys是仅能在Windows上运行的适用于ASP.NET Core的Web服务器. HTTP.sys运行在内核态中,极大减少了系统调用次数,运行效率很高:自带生存环境的 ...

  4. ASP.NET Core高性能服务器HTTP.SYS

    如果我们只需要将ASP.NET CORE应用部署到Windows环境下,并且希望获得更好的性能,那么我们选择的服务器类型应该是HTTP.SYS.Windows环境下任何针对HTTP的网络监听器/服务器 ...

  5. 在windows IIS服务商配置asp.net core的服务器坏境,并部署

    翻译自https://docs.microsoft.com/en-us/aspnet/core/publishing/iis 另一篇参考的文章 http://www.c-sharpcorner.com ...

  6. Asp.Net Core发布绑定域名和端口

    一.WebHostBuilder配置URL和端口进行侦听 UseUrls() 1.默认的ASP.NET Core项目绑定http://localhost:5000.通过使用UseUrls扩展方法——编 ...

  7. ASP.NET Core的Kestrel服务器

    原文地址----Kestrel server for ASP.NET Core By Tom Dykstra, Chris Ross, and Stephen Halter Kestrel是一个基于l ...

  8. [转帖]ASP.NET Core的Kestrel服务器

    ASP.NET Core的Kestrel服务器 https://cloud.tencent.com/developer/article/1023247 在这篇文章中: 何时使用Kestrel和反向代理 ...

  9. ASP.NET Core的Kestrel服务器(转载)

    Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器,libuv是一个跨平台的异步I/O库.ASP.NET Core模板项目使用Kestrel作为默认的web服务器.Kes ...

随机推荐

  1. 9、 Struts2验证(声明式验证、自定义验证器)

    1. 什么是Struts2 验证器 一个健壮的 web 应用程序必须确保用户输入是合法.有效的. Struts2 的输入验证 基于 XWork Validation Framework 的声明式验证: ...

  2. wordpress优化之结合prism.js为编辑器自定义按钮转化代码

    原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...

  3. javascript函数

    array.sort(function(a, b){ return a -b ; } )   把数组 array 按照从小到大排序. [11, 22, 586, 10, -58, 86].sort(f ...

  4. 装饰者模式 Decoration

    1.什么是装饰者模式 动态给对象增加功能,从一个对象的外部来给对象添加功能,相当于改变了对象的外观,比用继承的方式更加的灵活.当使用装饰后,从外部系统的角度看,就不再是原来的那个对象了,而是使用一系列 ...

  5. Android种使用Notification实现通知管理以及自定义通知栏(Notification示例四)

    示例一:实现通知栏管理 当针对相同类型的事件多次发出通知,作为开发者,应该避免使用全新的通知,这时就应该考虑更新之前通知栏的一些值来达到提醒用户的目的.例如我们手机的短信系统,当不断有新消息传来时,我 ...

  6. maven的pom.xml关系依赖书写顺序

    今天遇到了一个情况,以前代码编译没有问题,升级了hbase客户端phoenix驱动,又调整了thrift的关系依赖的位置,放到了这个驱动后面. 如下: 导致了一个thrift接口类编译报错: 检查这个 ...

  7. iOS 方法修饰符

     一.NS_DESIGNATED_INITIALIZER 用来修饰init方法,被修饰的方法称为designated initializer:没有被这个修饰的init方法称为convenience i ...

  8. grunt配置任务

    这个指南解释了如何使用 Gruntfile 来为你的项目配置task.如果你还不知道 Gruntfile 是什么,请先阅读 快速入门 指南并看看这个Gruntfile 实例. Grunt配置 Grun ...

  9. 巧用 mask-image 实现简单进度加载界面

    最近给 nzoo 折腾官网,拿 angular2.0 + webpack 实现SPA,然后觉得最终打包后的出口文件有点大,用户首次访问会有一个时间较长的白屏等候界面,感觉体验不太好. 于是希望在用户下 ...

  10. Angular2学习笔记——Observable

    Reactive Extensions for Javascript 诞生于几年前,随着angular2正式版的发布,它将会被更多开发者所认知.RxJs提供的核心是Observable对象,它是一个使 ...