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的一部分被安裝在服務器上的。

  部署之前要確保你的IIS上已經安裝了AspNetCoreModule托管模塊,如果沒有的話,點擊這里進行下載並安裝

開始

一、安裝IIS

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

二、發布項目

  發布我們建好的ASP.NET Core項目,然后選擇IIS,新建一項發布配置

 

 

三、在IIS上綁定添加網站

  添加一個網站,設置一下名稱,並將路徑指向你剛才發布的文件夾,然后啟動網站即可

  設置應用程序池的.NET CLR版本為“無托管代碼”,因為剛才也說了,IIS是作為一個反向代理的角色,並不需要它來托管代碼

四、瀏覽網站

  這個時候出現了這個問題

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

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

查看程序 如果沒有安裝.netcore2.2 就需要安裝

下載完成后安裝

就可以打開網站了

總結

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

 


免責聲明!

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



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