ASP.NET Core部署系列一:發佈到IIS上

前言瀏覽器

  當構建一個ASP.NET Core應用程序而且計劃將其運行在IIS中時,你會發現Core應用程序和以前版本的ASP.NET程序在IIS中的運行方式是徹底不同的。與ASP.NET時代不一樣,ASP.NET Core再也不是由IIS工做進程(w3wp.exe)託管,而是使用自託管Web服務器(Kestrel)運行,IIS則是做爲反向代理的角色轉發請求到Kestrel不一樣端口的ASP.NET Core程序中,隨後就將接收到的請求推送至中間件管道中去,處理完你的請求和相關業務邏輯以後再將HTTP響應數據從新回寫到IIS中,最終轉達到不一樣的客戶端(瀏覽器,APP,客戶端等)。而配置文件和過程都會由些許調整,中間最重要的角色即是AspNetCoreModule,它是其中一個的IIS模塊,請求進入到IIS以後便當即由它轉發,並迅速重定向到ASP.NET Core項目中,因此這時候咱們無需設置應用程序池來託管咱們的代碼,它只負責轉發請求而已。服務器

回顧以前的ASP.NET的經典託管網絡

   在經典ASP.NET應用程序中,全部一切都託管在IIS工做進程中(w3wp.exe),這也被稱爲IIS應用程序池。ASP.NET程序被託管在應用程序池中,而且被按照IIS內建的ASP.NET託管特性所實例化。當請求從http.sys傳入到ASP.NET應用程序管道時,本地運行時管理器會實例化一個表明應用程序的.NET運行時,同時引入HttpRuntime對象用來處理這個請求。來自http.sys的請求被派送到對應的應用程序池和HttpRuntime實例的託管站點。工具

ASP.NET CORE與IIS性能

  ASP.NET Core則徹底不一樣,它並非運行在IIS的工做進程中,而是獨立運行的。它運行於控制檯應用程序之中,控制檯中則運行了Kestrel Web服務器組件。Kestrel做爲一款.NET Web服務器的實現,它在吞吐量性能方面作了不少工做。它能夠快速未來自網絡的請求接入到應用程序中,可是它僅僅是一個最基本的Web服務器。它沒有相似IIS的Web管理服務,也沒有IIS那麼多的功能。網站

  ASP.NET Core程序獨立運行在控制檯應用程序中,並經過dotnet運行時命令調用。它並無被加載到IIS工做進程中,可是IIS卻加載了名爲AspNetCoreModule的本地Module,這個Module用於執行外部的控制檯程序。AspNetCoreModule是做爲ASP.NET Core Server Hosting Bundle的一部分被安裝在服務器上的。spa

  部署以前要確保你的IIS上已經安裝了AspNetCoreModule託管模塊,若是沒有的話,點擊這裏進行下載並安裝.net

開始3d

1、安裝IIS代理

  在控制面板→程序→啓用或關閉Windows功能→勾選Internet Information Services以及Web管理工具下的IIS管理控制檯

2、發佈項目

  發佈咱們建好的ASP.NET Core項目,而後選擇IIS,新建一項發佈配置

 

 

3、在IIS上綁定添加網站

  添加一個網站,設置一下名稱,並將路徑指向你剛纔發佈的文件夾,而後啓動網站便可

  設置應用程序池的.NET CLR版本爲「無託管代碼」,由於剛纔也說了,IIS是做爲一個反向代理的角色,並不須要它來託管代碼

4、瀏覽網站

  這個時候出現了這個問題

錯誤分析
IIS服務器上的.net core 運行時不是最新的,致使AspNetCoreModuleV2模塊缺失或者報錯

檢查發現 項目的版本是 .netcore2.2 ,而運行時安裝的爲 .netcore runtime 2.1.6

查看程序 若是沒有安裝.netcore2.2 就須要安裝

下載完成後安裝

就能夠打開網站了

總結

 至此,整個IIS的搭建已經完成,做爲我的的筆記記錄備忘,同時也共享出來,不知道你是否有所收穫。接下來會遇到什麼樣坑。無論怎樣,你的每一步,回過頭來看,都是值得的

相關文章
相關標籤/搜索