對於IIS部署NetCore 程序的教程,網上有很多,在這里就不贅述了。有需要的同學可以自行百度。。
今天要說的是部署之后的故事。
我們的開發環境集成了 Jenkins,部署在我們公司的一台實體服務器上,數據庫,redis,工作流服務,等一系列服務都放在一個服務器上(沒辦法,小項目)。
一直以來,在我們自己的服務器上,整個測試環境都還是挺穩定的,沒出現服務卡死,無法重啟等現象。
直到有那么一天,程序需要部署在客戶的測試機上了。經過一天的折騰,終於是把程序部署好了,網站也都順利的運行起來了。
然而噩夢才剛剛開始:
第一天程序運行還算平穩,除了個別配置問題造成的錯誤以外,並未發現其他問題。
故事(事故)是從第二天的下午開始的,一條來自客戶的微信,打破了我沉浸在Codeing For Bug 中的思緒。客戶反應網站無法登錄,報500錯誤。具體什么情況不太清楚。
截圖如下:
懵逼的我,本以為這是已經小事,重啟一下服務吧,但是!重啟服務居然還是不行,經過初步推斷是項目中有異步調用強制同步的地方,像下面這種,或者.result() 這種,
於是,一手改代碼,一手重啟客戶服務器。
改完代碼后,重新發包,部署。就當我以為這一切都會過去的時候,第二天,問題依然出現!
於是繼續,百度,Bing,360,Github。。。。(對,不FQ)
經過一番搜索,發現了一個跟我的描述很像的問題 https://github.com/dotnet/aspnetcore/issues/19555,於是乎。繼續修改,就像他描述的一樣:
remove BuildServiceProvider form startup
這是一個對文件監控,修改Redis 的監聽。最后改成這樣:
另外還優化了整個項目中的日志引用:統一通過 ILogger 進行日志的操作。
於是乎,也不知能不能起到效果,就又部署了一版到現場。
結果你們也許想到了,是的,第二天問題又出現了。
一籌莫展啊。查看系統日志,發現服務依然是被shut Down
並且很怪異的是,w3wp.exe 這個進程無法殺死。並且無法重啟。
繼續檢查代碼。發現有一個異常未經處理,於是乎懷疑是他的問題,同時申請了客戶的正式機,同步部署。
這期間,懷疑過客戶測試機配置的問題,懷疑過虛擬機的問題。於是,把程序同步部署到了客戶正式機上。
終於,第二天,測試機照常服務卡死,但正式機並沒有。對比了兩個 站點發現:
測試機的站點部署在Default Web Site 上,並且,該站點前面還有一個問好,,
百度說,這是一個多協議:IIS信息服務管理器的網站有個小問號顯示多個協議
最后,在不更換服務器的情況下,重新安裝了 dotnet-hosting-3.1.0-win,重新安裝了 IIS,並且刪除了 默認站點,新建站點進行部署。
可喜的是,程序終於可以正常運行了!
至此,僅以此博客做一下記錄!