只有累積,沒有奇蹟

2019年5月22日 星期三

[NETCore] ASP.NET Core 啟動失敗 - failed to start process with commandline

問題 
新專案使用 ASP.NET Core 2.2 開發完成並佈署至 Production 機器,在瀏覽網頁時跳出應用程式無法正常啟動的畫面,錯誤訊息為 'HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure'  ,不知為何最近跟 ASP.NET Core 啟動失敗特別有緣分 (一直常遇到這類的事情 XD),這篇文章就針對此問題的解決方式做簡單分享若是有不清楚或是錯誤的地方歡迎討論予糾正

解決方案
異常發生時畫面如下
根據錯誤訊息提供的線索,異常原因是因為啟動失敗造成 (Startup failure),在應用程式的 Log 中也並未記錄更多 log 資訊,在之前的文章 IIS 執行 ASP.NET Core 應用程式 中有提到過,要在 IIS 執行應用程式需安裝 ASP.NET Core 模組,才可以順利在 IIS 執行應用程式,但由於新機器有安裝過 .NET Core 模組因此排除此可能性,下一步就是到事件檢視器查看是否有更詳細的錯誤訊息,果不其然在事件檢視器中有記錄一連串的錯誤內容,錯誤來源都是 IIS AspNetCore Module V2
其錯誤訊息內容為 'Application '/LM/W3SVC/2/ROOT' with physical root 'D:\Web\project_folder\' failed to start process with commandline 'dotnet.exe .\project.dll' with multiple retries. The last try of listening port is '45353'. See previous warnings for details. ,啟動應用程式時呼叫 dotnet.exe 發生異常而啟動失敗,甚麼是 dotnet.exe ? 為什麼在 ASP.NET Core Application 啟動時會用到 ? 可以透過一張圖來說明
當應用程式啟動的時候,在 Windows 中會透過 dotnet.exe 對 ASP.NET Core 應用程式進行操作,如果有興趣了解更多可以參考 ASP.NET Core In Process Hosting on IIS with ASP.NET Core 2.2 有更詳細的說明。回到這邊,自己對此錯誤訊息的理解為要透過 commandline 起某個 ASP.NET Core 應用程式時也就是 dotnet.exe 時發生錯誤,嘗試幾次依舊錯誤就會跳出異常的畫面,要解決此問題可以透過下列任一種方式

調整 web.config
錯誤訊息中提到路徑問題中 dotnet.exe 執行失敗,dotnet.exe 正確的位置在 Windows 中應該預設安裝在  C:\Program Files\dotnet\dotnet.exe  路徑底下,而並不是在專案底下的路徑,因此開啟專案的 web.config 調整 aspnetcore 的 processPath 路徑改為正確的 exe 位置,C:\Program Files\dotnet\dotnet.exe,接著儲存 web.config 檔案。

設定 Application Pool
上述方式雖然可以解決問題,但如果每一次佈署完畢之後都要透過調整 web.config 方式實在有點不妥,因為每次 release 完都要在調整設定檔內容,可以說是相當不方便。另一種作法是修改 IIS 中的 Application 設定,設定步驟如下
Step 1 : 開啟IIS
Step 2 : 選擇應用程式集區內容,點選進階設定
Step 3 : 載入使用者設定檔改為 True
以上兩種方式都可以解決啟動失敗的問題,若是有更好的方法也歡迎提出來一起討論
Thanks & Happy Coding :)

參考
ASP.NET Core In Process Hosting on IIS with ASP.NET Core 2.2 

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com