[关闭]
@wddpct 2017-04-03T13:26:36.000000Z 字数 4167 阅读 1795

ASP.NET Core WebListener 服务器

ASP.NETCore


原文地址: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版本:

查看或下载示例代码

何时使用WebListener

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

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

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

如何使用WebListener

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

配置 Windows 服务器

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

配置你的ASP.NET Core应用

  1. public static int Main(string[] args)
  2. {
  3. Console.WriteLine("Running demo with WebListener.");
  4. var config = new ConfigurationBuilder()
  5. .AddCommandLine(args)
  6. .Build();
  7. var builder = new WebHostBuilder()
  8. .UseContentRoot(Directory.GetCurrentDirectory())
  9. .UseConfiguration(config)
  10. .UseStartup<Startup>()
  11. .UseWebListener(options =>
  12. {
  13. options.ListenerSettings.Authentication.Schemes = AuthenticationSchemes.None;
  14. options.ListenerSettings.Authentication.AllowAnonymous = true;
  15. });
  16. var host = builder.Build();
  17. host.Run();
  18. return 0;
  19. }

Note

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

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

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

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

  1. var settings = new WebListenerSettings();
  2. settings.UrlPrefixes.Add("http://localhost:8080");
  3. using (WebListener listener = new WebListener(settings))
  4. {
  5. listener.Start();
  6. while (true)
  7. {
  8. var context = await listener.AcceptAsync();
  9. byte[] bytes = Encoding.ASCII.GetBytes("Hello World: " + DateTime.Now);
  10. context.Response.ContentLength = bytes.Length;
  11. context.Response.ContentType = "text/plain";
  12. await context.Response.Body.WriteAsync(bytes, 0, bytes.Length);
  13. context.Dispose();
  14. }
  15. }

预注册URL前缀并配置SSL

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

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

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

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

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

  1. 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本身要求具备管理员权限,这些工具也默认如此。

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

下一步

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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注