一文講通.NET Core部署到Windows IIS最全解決方案
阿新 • • 發佈:2021-03-02
回顧之前的ASP.NET的經典託管
![image-20210126160117728](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163522451-1571383733.png)
在經典ASP.NET應用程式中,所有一切都託管在IIS工作程序中(w3wp.exe),這也被稱為IIS應用程式池。ASP.NET程式被託管在應用程式池中,並且被按照IIS內建的ASP.NET託管特性所例項化。當請求從http.sys傳入到ASP.NET應用程式管道時,本地執行時管理器會例項化一個代表應用程式的.NET執行時,同時引入HttpRuntime物件用來處理這個請求。來自http.sys的請求被派送到對應的應用程式池和HttpRuntime例項的託管站點。
![image-20210126160151908](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163522948-236495352.png)
**.net core**與**asp.net**釋出有點不一樣,ASP.NET Core不再由IIS工作程序(w3wp.exe)託管,而是使用自託管Web伺服器(Kestrel)執行,IIS則是作為反向代理的角色轉發請求到Kestrel不同埠的ASP.NET Core程式中,隨後就將接收到的請求推送至中介軟體管道中去,處理完你的請求和相關業務邏輯之後再將HTTP響應資料重新回寫到IIS中,最終轉達到不同的客戶端(瀏覽器,APP,客戶端等)。
如果你的應用只接收來自內部網路的請求,你可以只使用Kestrel本身。
![asp.netcore application](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163523552-2061956682.png)
如果你將你的應用部署在公共網路上,我們建議你使用IIS,Nginx或者Apache作為反向代理伺服器。一個反向代理伺服器接收來自網路的HTTP請求並且在經過一些初步處理後將請求傳遞到Kestrel伺服器。因為Kestrel不支援在多程序間分享同一埠,所以應用並不能直接和Kestrel合作。當你在某個埠上配置Kestrel執行偵聽時,不算主機頭如何標識,Kestrel會為該埠處理所有的流量。反向代理可以為多個應用共享唯一埠並將流量傳送給Kestrel。
![image-20210125165051150](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163524074-1888845089.png)
AspNetCoreModule,它是其中一個的IIS模組,請求進入到IIS之後便立即由它轉發,並迅速重定向到ASP.NET Core專案中,這時候我們無需設定應用程式池來託管我們的程式碼,它只負責轉發請求而已。
## 1、檢查是否安裝了IIS
在瀏覽器中輸入:http://localhost:如果得到如下"Internet information Services"歡迎頁面,則IIS已經安裝且執行正常;如果得到“server not found"(找不到伺服器)則IIS未安裝或已經停止執行
![image-20210125165102931](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163524520-127358875.png)
## 2、若沒有安裝IIS
### 2.1、開啟控制面板——程式
![程式](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163525014-120635284.png)
### 2.2、點選“啟用或關閉Windows功能”
![啟用或關閉Windows功能](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163525532-772009436.png)
### 2.3、點選“Internet Information Services”,然後在開啟的列表中勾選你需要的功能,點選確定
![Internet Information Services](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163525976-1117050113.png)
### 2.4、接著windows會自動下載並安裝您勾選的系統,耐心等待完成
![安裝iis](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163526447-1798376131.png)
當出現“Windows已完成請求的更改”的時候就說明完成了,點選立即重新啟動按鈕。
電腦重啟後,在IE瀏覽器位址列中輸入localhost,如果能正常開啟就說明iis安裝成功了
![iis安裝成功](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163526977-1221257587.png)
## 3、IIS安裝完成,安裝AspNetCoreModule
IIS和ASP.NET Core 之間的對接由AspNetCoreModule提供
1、安裝[.NET Core Windows Server Hosting](https://www.microsoft.com/net/permalink/dotnetcore-current-windows-runtime-bundle-installer)
地址:
[https://www.microsoft.com/net/permalink/dotnetcore-current-windows-runtime-bundle-installer](https://www.microsoft.com/net/permalink/dotnetcore-current-windows-runtime-bundle-installer)
2、安裝完成後,開啟如下頁面,雙擊IIS管理器
![雙擊IIS管理器](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163527456-125507678.png)
3、選擇左側樹的根目錄後,在右側選擇模組,如下圖所示。
![模組](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163527811-750972259.png)
4、安裝完成後再模組中會顯示**AspNetCoreModuleV2**模組
![AspNetCoreModuleV2](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163528544-36809775.png)
## 4、建立網站
新增網站:
網站—>右鍵新增網站
![新增網站](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163529044-402339764.png)
在上圖中,我們建立了一個網站名為:**RDICoreWeb50**,並指定了到我們網站的釋出路徑。
這兒最重要的一步就是要設定網站的“應用程式池”。
在IIS左側選擇“應用程式池”,在右則可以看到我們網站使用的“**RDICoreWeb50**”,雙擊開啟,並做如何配置: ![應用程式池設定](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163529419-2089446154.png)
## 5、VS2019釋出
Vs2019釋出我們可以直接釋出到IIS,也可以釋出到本地目錄,再用IIS的配置指向該目錄。
### 5.1、釋出到IIS
1、右鍵專案名稱,點擊發布
![vs2019釋出專案](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163530143-509660732.png)
2、選擇左路側的釋出,單擊“啟動”。
![啟動](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163530649-1935036121.png)
3、選擇Web伺服器。
![選擇Web伺服器](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163531137-1602153891.png)
4、單擊“下一步”,選擇Web部署。
![Web部署](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163532067-1964508602.png)
5、單擊“下一步”,配置Web伺服器連線相關資訊。
![iis連線設定](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163532517-587095442.png)
6、如下介面即新增配置檔案成功。
![釋出資訊](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163532813-2043005670.png)
上圖我們可以釋出到IIS,也可以釋出到本地目錄下,再用IIS指向該目錄。
### 5.2、通過命令列釋出應用程式
在程式包管理控制檯輸入dotnet publish --output " E:\WebSiteForIIS\RDICoreWeb50"回車(路徑和建立網站的路徑相同)
![通過命令列釋出應用程式](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163533230-575920580.png)
### 5.3、釋出到本地資料夾,再用IIS指定釋出的資料夾(推薦)
在釋出頁,我們選擇“資料夾”即可,如下圖所示。
![釋出到本地資料夾](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163533788-111826418.png)
單擊“下一步”,設定需要釋出的本地資料夾,如下圖所示。
![釋出的本地資料夾](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163534239-748103286.png)
單擊完成後,回到主介面,再單擊“釋出”按鈕,即可釋出到我們設定的目錄,如這兒設定為:**E:\WebSiteForIIS\RDICoreWeb50**
![釋出](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163534861-395267739.png)
在上圖中單擊“配置”,如下圖所示。
![釋出設定](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163535313-1962700318.png)
### 5.2、預覽釋出效果
釋出成功後,在IIS把目錄指定到我們的釋出目錄即可,如下圖所示。
![預覽釋出效果1](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163535851-218812843.png)
釋出成功後,瀏覽釋出的程式,如下圖所示。
![釋出效果-登入介面](https://img2020.cnblogs.com/news/157572/202101/157572-20210126163536680-1260953895.png)
![釋出效果-主介面](https://img2020.cnblogs.com/blog/157572/202101/157572-20210126163537223-1639913292.png)
**參考文章:**
[.NET Core部署到linux(CentOS)最全解決方案,常規篇](http://blog.rdiframework.net/article/244)
[.NET Core部署到linux(CentOS)最全解決方案,進階篇(Supervisor+Nginx)](http://blog.rdiframework.net/article/245)
[.NET Core部署到linux(CentOS)最全解決方案,高階篇(Docker+Nginx 或 Jexus)](http://blog.rdiframework.net/article/246)
[.NET Core部署到linux(CentOS)最全解決方案,入魔篇(使用Docker+Jenkins實現持續整合、自動化部署)](http://blog.rdiframework.net/article/248)
[一網打盡,一文講通虛擬機器VirtualBox及Linux使用](http://blog.rdiframework.net/article/243)
[RDIFramework.NET敏捷開發框架助力企業BPM業務流程系統的開發與落地](http://blog.rdiframework.net/article/251)
[RDIFramework.NET敏捷開發框架 ━ 工作流程元件介紹](http://blog.rdiframework.net/article/233)
[常用linux命令,開發必備](http://blog.rdiframework.net/article/247)
[全新跨平臺版本.NET敏捷開發框架-RDIFramework.NET5.0震撼釋出](http://blog.rdiframework.net/article/241)
-----
一路走來數個年頭,感謝RDIFramework.NET框架的支持者與使用者,大家可以通過下面的地址瞭解詳情。
RDIFramework.NET官方網站:[http://www.rdiframework.net/](http://www.rdiframework.net/)
RDIFramework.NET官方部落格:[http://blog.rdiframework.net/](http://blog.rdiframework.net/)
特別說明,框架相關的技術文章請以官方網站為準,歡迎大家收藏!
RDIFramework.NET框架由海南國思軟體科技有限公司專業團隊長期打造、一直在更新、一直在升級,請放心使用!
歡迎關注RDIFramework.NET框架官方微信公眾號(微訊號:guosisoft),及時瞭解最新動態。
使用微信掃描二維碼立即關注
![微訊號:guosisoft](https://img2020.cnblogs.com/blog/157572/202102/157572-20210207112955919-1772255001.png)