01、NetCore2.0優化之Web服務器 與 IIS解耦


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應用啟動流程源碼初窺


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM