关于.NET5在IIS中部署的几个问题总结
本來我的系列教程已經慢慢剝離開IIS了,畢竟有了Docker容器以后,配合Nginx使用真的很不錯。但是還是有很多同學使用IIS的,這個不可否認IIS的重要性。隨著.NET的發布,很多小伙伴已經開始升級了,我也就陸陸續續收到了一些問題咨詢,問題也是說大不大,說小不小,像我這樣很久都沒有玩兒過IIS的,也就一兩個小時就解決了,所以基礎知識還是特別重要的。
同時,我也收到了一些質疑的聲音:
比如.NET5的鏡像有問題?
比如為什么要升級呀,又不是LTS?
鑒于這些問題,我想說和郭德綱老師的水洗煤發射火箭是同一類問題,我不是很懂,也沒辦法準確回答,具體請百度吧。
本文主要是列舉幾個這幾天的問題,不會深入講解原理什么的,很好理解的。
再次強調下,本文出現的不是.NET的Bug!!!,都是一些工具上的問題,只是一些彎路和嘗試而已,因為這些情況,在3.1的時候也會有,只要細心的發現就能知道。
- 奇幻的旅程,馬上開始 -
BCVP 開發者說
▼
-01-
IIS安裝的問題
這里有兩個問題,第一個安裝IIS,都勾選哪幾項,我為了測試效果,重裝了我的某一臺服務器:
然后安裝下IIS,我這里很簡單的勾選下這幾項,不過也沒有具體測試,是否可以更少的安裝:
安裝完IIS,系統里找不到,這確實偶爾會有這個小問題:
需要重啟下,然后就可以在控制面板里找到:
關于IIS的安裝就特別簡單了,不多說了,下邊說說重頭戲。
下載運行時或者SDK,那為了演示效果,肯定我們在服務器里,只需要下載運行時是吧,畢竟不需要開發,或者命令行操作,如果你是用IIS的話,肯定不會再搞命令行了,基本都是本地拷貝上傳到服務器的。
下載地址:
https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-aspnetcore-5.0.0-windows-x64-installer
接下來就是部署站點了。
-02-
IIS部署,出現500.19異常
首先,已知是項目已經在本地成功升級.net5,如果不會的話,可以看看我之前的文章《BCVP第2期:項目已完成升級.NET5.0》,然后本地開發已經能正常運行了,把發布后的文件上傳到服務器。
關于這個異常,先來個異常截圖,其實一般老手一眼就能看出來問題點:
沒錯,就是這個500.19 - Internal Server Error。
我之前寫過一篇很全的升級3.1的文章:
https://www.cnblogs.com/laozhang-is-phi/p/beautifulPublish-mostBugs.html
這里講了幾乎所有升級3.1的時候遇到的問題,同樣適用于5.0。
沒錯,就是沒有安裝指定的模塊!測試方法,就是點擊對應的站點,右側功能區,點擊模塊,看看是否正常顯示:
所以,就需要安裝指定的模塊了。
因為是.NET5,所以不僅需要安裝運行時,還要安裝HOST,省事兒的話,直接安裝捆綁的包就行了:
https://dotnet.microsoft.com/download/dotnet/5.0
然后下載并安裝:
安裝完成后,可以在控制面板的程序中,查看到相應的結果:
如果提示重啟的話,需要重啟,接下來就可以在IIS中,點擊模塊,正常顯示了:
是不是很熟悉,是不是很簡單?
-03-
IIS部署,出現異常502.5
剛剛我們已經安裝了Host和Runtime,但是運行的時候還是出現了502.5,那是為什么?現在我還是把錯誤截圖貼出來:
可以看到,是進程外啟動失敗,如果你看過我的視頻,關于進程內和進程外的介紹,肯定會知道他們的區別。
進程外,其實就是關于Kestrel.exe的,進程內是w3wp.exe的,如果你之前的項目是3.1升級過來的,在發布的時候,會生成一個web.config,里邊有關于進程啟動的配置:
<?xml version="1.0" encoding="utf-8"?> <configuration><location path="." inheritInChildApplications="false"><system.webServer><handlers><add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" /></handlers><aspNetCore processPath="dotnet" arguments=".\Blog.Core.Api.dll" stdoutLogEnabled="false"stdoutLogFile=".\logs\stdout" hostingModel="OutOfProcess" /></system.webServer></location> </configuration> <!--ProjectGuid: 6F47A41A-085E-4422-BB73-5A2CBAA07D9F-->
就是hostingModel,不知道有多少小伙伴在意過這個,這里官方默認的是OutOfProcess進程外的,但是如果你新建一個.net5的項目,它發布好后,默認的就是inprocess的,不信你自己可以看看。
這就導致了,部署的時候,報了進程外的異常,所以只需要把這里改成inprocess就行了,就可以一切正常。
如果你說,我就想要進程外的,可以!在服務器上安裝對應的SDK就行了,記得有必要的話需要重啟服務器的。
到這里,應該就沒有什么問題了:
-04-
.NET5.0 無法連接Oracle
這個也是這幾天問的比較多的,我之前使用的Oracle不多,但是經過測試,發現了.NET5.0的Web項目連接Oracle的時候出異常,但是控制臺卻是可以的。
經過官方給建議,主要是ASP.NET5.0做了更高的安全驗證:
這也就是說明了,為什么控制臺會成功,而web項目會失敗的原因。
更多內容,查看我提交的這個issue吧:
https://github.com/dotnet/aspnetcore/issues/27872
官方也很快的給出了解決方案和跟蹤報告,橫跨全球,六個小時就解決了,說實話真的很佩服,也很激勵我的。
方案很簡單,只需要在.net5的webapi項目的.csproj文件中,配置屬性即可:
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>想必都能看得懂,好啦,.NET5已經順利的連上Oracle了,這種問題還是要和第三方溝通,因為不是.Net的問題的。
打完收工!
基于Net/Core,快速搭建 API & SPA 及微服務應用組織
BASE NETCORE (VUE) PROJECT TEAM
每一個.NET開發者都可以通過自己的開源項目(最好可以配套簡單發表些文章)在這里進行分享,BCVP開發者組織的意義就是激發和挖掘更多的作品,可能偏基礎,但是都會有價值。目的就是希望:每個人能將從社區學到的知識,進行自己消化和總結,濃縮成一個個獨立的項目,接著投入到社區,最后讓更多的初學者去了解、去學習、去思想碰撞,從而達到學習來源于社區,最后反哺于社區的良好循環目的,我們都是學生,也都是下一批初學者的老師,這才應該是一個社區正向推動的方法。
地址:
https://github.com/BaseCoreVueProject
可以在Home倉庫里,查看具體的流程說明,只要你愿意分享,就來吧。
加入我們
總結
以上是生活随笔為你收集整理的关于.NET5在IIS中部署的几个问题总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Wifi6网络
- 下一篇: asp.net core 使用 Test