原文地址:WebListener server for ASP.NET Corehtml
By Tom Dykstra, Chris Rossgit
WebListener是一個只能運行在Windows上的ASP.NET Core web服務器,基於Http.Sys內核模塊驅動構建。在不借助IIS做爲反向代理服務器的狀況下,WebListener能夠替代Kestrel用來與直接與互聯網相連。實際上,WebListener不能和IIS或IIS Express一塊兒使用,這是由於它與ASP.NET Core模塊並不兼容。github
儘管WebListener爲ASP.NET Core而開發,它也能夠經由Microsoft.Net.Http.Server NuGet 包而被任何.NET Core和.NET Framework應用所使用。web
WebListener支持如下功能:windows
支持的Windows版本:api
當你須要將服務器直接暴露到互聯網上而且不使用IIS部署時,WebListener會是一個有效的選擇。
服務器
由於WebListener基於Http.Sys構建,它不會請求反向代理服務器防護攻擊。對於防護多類攻擊下和保證全功能服務器的健壯性,安全性以及可擴展性而言,Http.Sys是一種成熟的技術。IIS自己做爲HTTP偵聽器運行在Http.Sys之上。app
在你須要某項只能由Weblistener提供而Kestrel不能支持的功能的時候,對於內部部署應用而言,它也是一個不錯的選擇。
asp.net
如下是對主機系統和你的ASP.NET Core應用設定任務的簡要概述。
安裝你的應用所須要的.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的更多信息請點擊相關連接。
安裝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應用中運行項目,你必須手動更改所選配置文件,如如下屏幕截圖所示:
安裝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(); } }
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證書。
更多的信息,請參考如下資源: