ASP.NET Core WebListener 服务器

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会是一个有效的选择。
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">

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

在你需要某项只能由Weblistener提供而Kestrel不能支持的功能的时候,对于内部部署应用而言,它也是一个不错的选择。
frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 167px;">

如何使用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应用

  • 安装Microsoft.AspNetCore.Server.WebListener Nuget包 ,该包带有Microsoft.Net.Http.Server包依赖。

  • 在应用的Main方法中调用WebHostBuilder的扩展方法UseWebListener,并指定你需要的WebListener选项和参数,如以下示例所示:

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应用中运行项目,你必须手动更改所选配置文件,如以下屏幕截图所示:

frameborder="0" scrolling="no" style="border-width: initial; border-style: none; width: 658px; height: 172px;">

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

  • 安装Microsoft.Net.Http.ServerNuGet包

  • 如你在ASP.NET Core中做的那样,预注册URL前缀注册到WebListener,并建立SSL证书。

关于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=Usersnetsh 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}".

以下是官方参考文档:

  • Netsh Commands for Hypertext Transfer Protocol (HTTP)

  • UrlPrefix Strings

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

  • How to: Configure a Port with an SSL Certificate

  • HTTPS Communication - HttpListener based Hosting and Client Certification
    这是一篇过时但仍有些有用信息的第三方博客

  • How To: Walkthrough Using HttpListener or Http Server unmanaged code (C++) as an SSL Simple Server
    这也是一篇过时但仍有些有用信息的博客

  • How Do I Set Up A .NET Core WebListener With SSL?

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

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

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

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

  • SelfCert

  • Makecert UI

下一步

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

  • Sample app for this article

  • WebListener source code

  • Hosting

原文地址:http://www.cnblogs.com/Wddpct/p/6123665.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git删除本地分支、删除远程分支 复制分支

git删除本地分支、删除远程分支 It_BeeCoder 2019-05-15 09:47:20 80268 收藏 15 展开 https://blog.csdn.net/lihua5419/article/details/81706905 1、查看所有分支 git branch -a 2、查看当前所在分支 git branch 3、删除本地的bug_xzx分支 git branch -d bug_xzx 4…

ASP.NET Core的Kestrel服务器

Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器&#xff0c;libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。 Kestrel支持以下功能&#xff1a; HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix sockets Kestrel …

RandomAccessFile

转载自 RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的&#xff0c;你就可以用seek( )方法来访问记录&#xff0c;并进行读写了。这些记录的大小不必相同&#xff1b;但是其大小和位置必须是可知的。但是该类仅限于操作文件。 RandomAccessFile不属于I…

JSR303常见参数

常见参数 NotNull(message "名字不能为空")private String userName;Max(value 120, message "年龄最大不能查过120")private int age;Email(message "邮箱格式错误")private String email;空检查Null 验证对象是否为nullNotNull 验证对象是…

ASP.NET Core服务器综述

ASP.NET Core应用通过一个进程内的HTTP服务器实例实现运行&#xff0c;这个服务器实例侦听HTTP请求并将请求作为组成HttpContext的一组请求功能集暴露给我们的应用程序。 ASP.NET Core搭载两个服务器实现&#xff1a; Kestrel是一个基于libuv的跨平台HTTP服务器&#xff0c;lib…

linux中usb设备名,Linux 中识别 USB 设备名字的 4 种方法

摘要&#xff1a; 对于初学者来说&#xff0c;在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备。这也许是你的系统硬盘、外部的存储设备或者是可移动设备&#xff0c;比如 USB 设备或 SD 闪存卡等。 现如今&#xff0c;使用 USB 设备来传输文件是十分常见的…

探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类

转载自 探究Java File类中list()、listFiles()的使用及区别&#xff0c;认识和使用匿名内部类 内容概要&#xff1a; 1、认识File类&#xff1b; 2、File的构造函数&#xff1b; 3、list()及其重载方法的使用&#xff0c;匿名内部类的两种使用方式&#xff1b; 4、list…

自动配置原理---SpringBoot

自动配置原理 配置文件到底能写什么&#xff1f;怎么写&#xff1f; SpringBoot官方文档中有大量的配置&#xff0c;我们无法全部记住 分析自动配置原理 我们以**HttpEncodingAutoConfiguration&#xff08;Http编码自动配置&#xff09;**为例解释自动配置原理&#xff1b;…

Docker 部署dotnetcore

安装docker 系统还是之前centos 7.1 https://www.docker.com/products/docker#/linux yum update 创建源: /etc/yum.repos.d/docker.repo tee /etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] nameDocker Repository baseurlhttps://yum.dockerproject.org/repo/main/…

虚拟机安装windows ghost版本系统记录完整过程

重点 1.磁盘一定要分成2个 2.直接安装第一个盘 就是进入CD后选1 自动安装 https://blog.csdn.net/hanzl1/article/details/79298787 虚拟机安装windows ghost版本系统记录完整过程 NO如果 2018-02-09 15:26:08 15193 收藏 5 分类专栏&#xff1a; windows 虚拟机 版权 …

linux下kill指令默认信号,Linux基础命令之kill命令

相信大家在使用Linux的过程中都会遇到过某个程序出错导致系统锁死的情况&#xff0c;按照常规的思维我们会通过重启来重新启动系统。然而事实上在Linux中并不需要进行重启就能够完成出错程序的关闭操作。在Linux中我们可以通过使用"kill"命令来强制终结它。那么到底它…

Supervisor 守护 dotnetcore 程序

环境准备 1.设置nginx 服务开机启动 systemctl enable nginx.servic 2.安装Supervisor yum install python-setuptools easy_install supervisor 3.配置Supervisor mkdir /etc/supervisorecho_supervisord_conf > /etc/supervisor/supervisord.conf#指定配置文件supervisord…

import javax.servlet.ServletRequest 关于IDEA javax.servlet.http.HttpServletRequest 不存在 解决方案

https://blog.csdn.net/a290450134/article/details/80964726 关于IDEA javax.servlet.http.HttpServletRequest; 不存在 解决方案 渊丹 2018-07-09 08:32:08 16576 收藏 8 分类专栏&#xff1a; 学习笔记 工具配置 版权 昨天从eclipse导入了一个web项目到idea&…

centos 7 部署 dotnetcore+Angular2 实践

1.准备 服务器: 腾讯云主机(Centos 7.1) http://www.qcloud.com/ 项目:aspnetcoreangular2开源项目模版 https://www.npmjs.com/package/generator-aspnetcore-angular2 该项目使用webpack 打包Angular2, 内网涉及到npm请使用tnpm 2.环境安装 (1)安装dotnetcore https://www.mi…

Python函数之计算规则图形的面积

来个直接的吧&#xff0c;看代码; #codingutf-8 from __future__ import unicode_literals import sys reload(sys) sys.setdefaultencoding(utf-8)#圆形 def yuan():rinput("请输入圆的半径:".decode(utf-8).encode(gbk))print 圆的面积是&#xff1a;,return 3.14*…

FinTech浪潮已到,五大金融场景将迎变革

FinTech是FinanceTechnology的缩写&#xff0c;可译为“金融科技”&#xff0c;与“互联网金融”一词相比&#xff0c;它更能突出科技的重要性。FinTech所带来的&#xff0c;不仅仅是升级金融领域的各种服务&#xff0c;而是一场革命&#xff0c;是金融领域的颠覆性未来。 FinT…

linux下q和q 的区别,linux命令中q、wq、q!的区别

Linux中没这个命令&#xff1b;只是在vi中有这个指令&#xff1b;q表示退出&#xff1b;w表示保存退出&#xff1b;q!表示强制退出。linux命令是对Linux系统进行管理的命令&#xff0c;对于Linux系统来说&#xff0c;无论是中央处理器、内存、磁盘驱动器、键盘、鼠标&#xff0…

spingmvc 通过xml配置redis jedispol 有密码 通过xml配置redis中的 jedispool(有密码)

https://blog.csdn.net/programmer_hard/article/details/103700334 通过xml配置redis中的 jedispool(有密码) programmer_hard 2019-12-25 15:55:16 209 收藏 分类专栏&#xff1a; java 版权 从git上拉了个项目一直报错, 看了下原因是因为redis一直没连接上. 于是看了下…