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選項和參數,如以下示例所示:
配置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跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的ASP.NET Core WebListener 服务器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一款全新的基于IntelliJ和ReSh
- 下一篇: ASP.NET Core服务器综述