使用IIS在Windows上託管ASP.NET Core(本文僅針對Window伺服器)
使用IIS在Windows上託管ASP.NET Core(僅針對伺服器)
博文背景: 最近想用.Net Core進行做畢業設計,於是在阿里雲買了一台雲伺服器,學生價一折超級便宜(看著它提示畢業以後就要恢復原價,要畢業了好心酸呀QWQ),現在是10元一月,博主覺得阿里雲最好的在於伺服器可以隨時更換鏡像(0成本快速更換window->Linux),而且伺服器網速超級快,基本滿足日常的使用。
注意事項: 以下出現的藍色字體都是URL,可直接跳轉,如是文件:點擊直接下載即可.
配置前提
- Window伺服器: 阿里雲伺服器學生價購買地址
- Windows Server 2008 R2及以上版本
注意事項: 伺服器千萬不要選擇window server 2008 SP2 !
Windows server 2008 是基於Windows vista 的伺服器系統,有32位和64位兩個版本. Windows server 2008 R2是基於Windows 7的伺服器操作系統只有64位版. Windows Server 2008 SP2表示是在Windows server 2008基礎上添加了SP2的補丁,全稱是:Windows Server 2008 Service Pack (SP) 2。
步驟一 : 首先配置IIS
1 . 低版本window server(如2008R2) 打開控制面板 -> 程序 -> 程序和功能 -> 打開或關閉Windows功能 -> 角色 -> 添加角色 -> 選擇web伺服器 -> 按需勾選需要的服務
2 . 高版本window server(如2016版本) 按window -> 伺服器管理器 ->添加角色 ->選擇web伺服器 -> 按需勾選需要的服務 然後點擊下一步進行安裝即可。 然後進入 控制面板 > 管理工具 > Internet 信息服務(IIS)管理器 便可看到IIS管理器,為了方便以後使用,win10的話可以固定到開始桌面,其餘window操作系統可以選擇發送到桌面快捷方式。
步驟二: 安裝.NET Core Windows Server Hosting軟體包
1 . 在安裝.NET Core Windows Server Hosting軟體包之前獲取並安裝Microsoft Visual C ++ 2015 Redistributable 2 . 在伺服器上安裝.NET Core Windows Server Hosting軟體包。該軟體包安裝了.NET Core Runtime,.NET Core Library和ASP.NET Core Module。該模塊在IIS和Kestrel伺服器之間創建反向代理(點擊可查看Kestrel原理)。 3 . 重新啟動系統或cmd 執行net stop was / y,然後從命令提示符處啟動net start w3svc,以更改系統環境變數的Path,操作完以後我們打開IIS管理工具,可以在處理程序映射看到aspNetCore。 4 . 安裝.NET Core 2.0 SDK
注意事項:
1 : 如果安裝.NET Core Windows Server Hosting不成功的話查看伺服器版本是否是window server2008R2以上 2 : 安裝完一定要重新啟動系統或cmd執行net stop was / y,然後從命令提示符處啟動net start w3svc 3 : 環境變數存在dotnet(如下圖)才可以在web.config中這樣使用
<aspNetCore processPath="dotnet" arguments=".core.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" />
步驟三: 部署.NetCore程序
1 . 在IIS管理器中,創建一個新的網站,寫上站點名稱,並將物理路徑設置為部署的應用程序文件夾(或者直接將DefaultAppPool改為無託管代碼,將程序部署在此) 2 . 將應用程序池設置為無託管代碼。
步驟四: 部署完可能遇到的問題
這裡僅記錄博主折騰半天才解決的問題:
1 . 出現任何無法運行的問題都應該去查看事件查看器 低版本server(如2008R2): 控制面板 > 管理工具 ->事件查看器 高版本(如2016): 直接按window ->事件查看器
2 . 查看發現報這個錯誤 Application 『MACHINE/WEBROOT/APPHOST/DEFAULT WEB SITE/CORE』 with physical root 『C:core』 failed to start process with commandline 『.dotnet.exe .core.dll』, ErrorCode = 『0x80070002 : 0.(如下圖)
出現問題思考:
1.1 一開始以為是系統變數沒有dotnet.exe,查看發現有。 1.2 折騰了半天Github和Google,看了官方文檔博主都已進行嘗試依舊無效(文章下面有Micorsoft官方文檔)。 1.3 懷疑或許是本地的.net core版本及伺服器配置的版本不同導致,嘗試改變配置文件,無奈失敗。 1.4 CMD管理員進入自己部署上去的應用程序目錄,直接執行報錯的內容的程序,嘗試希望報個沒許可權的錯誤什麼的,驚喜的是出現了想要的結果(如下圖)。 1.5 發現果然是版本的問題呀啊啊啊,開心又生氣,更改版本重新部署了一遍,果然成功了,開心的寫下這篇博文。
最後引言
過程確實令人苦惱又期待,結果卻總是讓人覺得這一切探索的過程都是值的的,如果讀者在部署過程中遇到了任何問題或者發現文章有錯誤,可以在評論區留言,期待更多的交流。
附上Microsoft官方查閱文檔: [1]https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x#supported-operating-systems [2]https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module?tabs=aspnetcore2x [3]https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x
如果覺得我的文章對您有用,請隨意讚賞。您的支持將鼓勵我繼續創作!
推薦閱讀:
※【微軟學院】性能是.NET Core的一個關鍵特性
※IIS asp.net 註冊。 為什麼Framework 3.5為什麼在IIS的ASP.NET選項找不到?
※.NET開源Protobuf-net組件修鍊手冊
※CLR簡介
※[你必須知道的.NET] 第五回:深入淺出關鍵字---把new說透