01、NetCore2.0優化之Web服務器 與 IIS解耦
在Asp.Net Core 2.0中,是如何實現跨平台的?不使用IIS了,在linux上的WebServer是什么?
------------------------------------------------------------------------------------------------------------
寫在前面:這是一個系列的文章,總目錄請移步:NetCore2.0技術文章目錄
------------------------------------------------------------------------------------------------------------
一、歷史問題
ASP.NET Core出現之前,ASP.NET應用的Web服務器都是IIS。它強依賴於IIS,不具有擴展性;又因為IIS只有Windows版本,沒有如Linux等版本,造成了ASP.NET Web應用只能運行在Windows操作系統上。
二、OWIN規范的出現
OWIN(Open Web Interface fro .NET),這個規范定義了一組接口,用來解耦Web服務器和Web應用程序。它規范和定義了Web服務器和Web應用程序之間的相互調用關系。也就是說,只要實現了OWIN接口的Web服務器都可以支持ASP.NET Web應用程序的運行了。
OWIN規范的詳細情況可訪問:
http://owin.org/
三、ASP.NET Core默認提供的Web服務器
目前實現了OWIN接口的WEB服務器有很多,比如Katana、Kestrel等。ASP.NET Core默認提供的WEB服務器是Kestrel,它是跨平台的,可以運行在Linux或者Windows操作系統上。
四、ASP.NET Core 2.0下的Web服務器使用姿勢
- 經典模式
使用Kestrel做SelfHost(自宿主)模式:Kestrel 沒有安全、緩存等功能,因此不應該把 Kestrel 暴露到公網。
- 反向代理模式
也可以使用 IIS、Nginx 做反向代理服務器:反向代理收到Http Request后,經過預處理后,再轉發給 Kestrel,由反向代理服務器進行緩存、安全等處理。
五、在代碼中指定Kestrel為WebServer
1 using Microsoft.AspNetCore.Hosting; 2 3 namespace MyWeb 4 { 5 class Program 6 { 7 static void Main(string[] args) 8 { 9 var host = new WebHostBuilder() 10 .UseKestrel() // 指定WebServer為Kestrel 11 .UseStartup<StartUpB>() // 配置WebHost 12 .Build(); 13 14 host.Run(); // 啟動WebHost 15 } 16 } 17 }
注:UserXXX是現在很流行的用法,一般是底層提供了一個插件框架(依賴倒置DI),並約定了一些接口規范,上層根據需要實現這些接口規范,通過UseXXX的方式注冊到插件框架中。參考:05、NetCore2.0插件框架之Web應用啟動流程源碼初窺
