只有累積,沒有奇蹟

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 

Related Posts:

  • [NETCore] ASP.NET Core 建立與解析 QueryString 參數說明 之前介紹過在 .NET 中可以使用 Utility.ParseQueryString 處理 Url 中的參數,傳送門 : 使用 ParseQueryString 取得網址參數,但所使用的 System.Web 命名空間僅存在於 ASP.NET Framework 不支援 ASP.NET Core,在搜尋更好的解決方案中發現了在 ASP.NET Core 提供新的 API - QueryHelpers 可以達到同樣效果,此… Read More
  • [NETCore] ASP.NET Core 3.0 Worker Service 搭配 Coravel 建立排程服務前言 如果一直有在 follow 消息的朋友可以發現在 ASP.NET 3.0 有新增 Work Services 專案範本,可以透過幾個簡單的步驟使用 Workers with Windows Services 服務,詳細可以參考微軟官網對於 worker Service 的介紹文章 .NET Core Workers as Windows Services,在上一篇介紹了 ASP.NET Core 中的輕量級排程… Read More
  • [NETCore] 如何在 ASP.NET Core 中使用 YAML前言 今天同事在分享 ASP.NET Core 時介紹使用 YAML 作為組態設定檔,自己在過去比較少接觸 YAML 設定檔,也趁此機會來好好讓彼此熟悉一下,在 YAML 官網介紹說明文字如下 YAML is a human friendly data serialization standard for all programming languages. YAML 是一種可讀性高,適用於表達資料序列化的格式,在公司 CI… Read More
  • [NETCore] ASP.NET Core 中的排程利器 - Coravel 前言 在 ASP.NET 中相信大家都會有過開發 Scheduler 排程的需求,過去可能會使用 ASP.NET 中較有名的框架像是 Quartz.NET 或是 Hangfire,兩種框架各有優缺點小弟不才剛好都有碰過,兩種排程框架各有喜好者可以依據自己的愛好來選用。今天所要介紹的是另一套 Schedule Job 框架 Coravel,作者在設計 API 時用 Fluent interface 方式進行設計,因此在使用上相當直覺與方便… Read More
  • [NETCore] ASP.NET Core 啟動失敗 - 嘗試存取通訊端被拒絕,因為存取權限不足問題  接獲同事詢問專案無法正常啟用,專案是使用 ASP.NET Core 2.2 開發並搭配 Kestrel 使用,在過去開發時都正常運作但今天忽然就遭遇啟動異常的狀況,在啟用時會跳出錯誤訊息為 'Unable to bind to http://localhost:5000 on the IPv4 loopback interface: '嘗試存取通訊端被拒絕,因為存取權限不足。''  ,這篇… Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com