只有累積,沒有奇蹟

2019年5月14日 星期二

[NETCore] ASP.NET Core 啟動異常 - HTTP Error 500.30 - ANCM In-Process Start Failure

問題 
在開發專案時跳出異常訊息,錯誤訊息為  HTTP Error 500.30 - ANCM In-Process Start Failure 這篇就針對此案例作簡單紀錄與分享若是有不清楚或是錯誤的地方歡迎討論予糾正

解決方法 
廢話不多說,先看案發現場的錯誤畫面
執行異常的程式代碼,看起來很單純的代碼
  1. public static void Main(string[] args)
  2. {
  3. CreateWebHostBuilder(args).Build().Run();
  4. }
  5.  
  6. public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  7. WebHost.CreateDefaultBuilder(args)
  8. .UseStartup<Startup>();
  9.  
在錯誤訊息中提到應用程式無法啟動可能是因為 Application 啟動失敗、或是啟動時發生異常造成,建議解決方案為開啟事件檢視器進行確認,因此照著建議的除錯步驟找出問題的發生點

事件檢視器
開啟事件檢視器發現啟動 Application 時有多筆異常原因,過濾後有幫助的訊息如下
可以看到事件檢視器錯誤訊息為  Application '/LM/W3SVC/2/ROOT' with physical root 'D:\Marcus\git\SerilogWebAppLab\SerilogWebAppLab\SerilogWebAppLab\' hit unexpected managed exception, exception code = '0xe0434352'. Please check the stderr logs for more information. ,其中提到 exception code 為 0xe0434352,在 How do I fix a .NET windows application crashing at startup with Exception code: 0xE0434352 文章中提到此錯誤代碼為 .NET 在執行中異常的代碼,因此錯誤訊息也建議透過 stderr 紀錄來查看更多訊息 (一直挖挖蒐集麵包屑的概念),接著下一步是確認 stderr 相關 Log 紀錄。

ASP.NET Core Module stdout log
在 ASP.NET Core 中 stdout log 預設是關閉的,可以透過 Web.config 設定  stdoutlogEnable  開啟,如下
  1. <aspNetCore processPath="dotnet"
  2. arguments=".\MyApp.dll"
  3. stdoutLogEnabled="true"
  4. stdoutLogFile=".\logs\stdout"
  5. hostingModel="InProcess">
stdoutLogEnabled 為啟用 stdout 紀錄,stdoutLogFile 是設定輸出 Log 路徑。如果是使用 Visual Studio IDE 使用 IIS Express 執行的話,則可以到專案檔底下的隱藏資料夾中的 applicationhost.config 搜尋 aspNetCore 區塊設定
  1. ProjectName\.vs\ProjectName\config\applicationhost.config
修改後儲存 Web.config 檔案,重新執行一次應用程式,可以看到專案底下 Log 資料夾有新增指定檔案
檔名前面為 stdout 開頭,後面為時間戳記及處理事件代碼
  1. stdout_20190513222912_28664.log
開啟 Log 檔案,內容顯示無法 Application 啟動時異常原因
透過 stdout Log 得知異常原因為 CreateDefaultBuilder 方法時預設會去讀取 appsettings.json 檔案,但由於 json 檔案格式錯誤造成 application 啟動時無法正常啟動,因而顯示 HTTP error 500.30 的狀況發生,修正後即可正常執行,宣告除蟲成功 ! 

備註 : Troubleshoot ASP.NET Core on IIS 內文有提到因為沒有限制記錄檔大小或是數量上限,啟用可能會造成應用程式或是伺服器失敗,請在確認完畢後關閉  stdoutlogEnable  為 false。

Improve 
調整代碼在啟動時加上 try catch 記錄錯誤訊息,讓之後遇到同樣事情可以更快發現 :)
  1. public class Program
  2. {
  3. public static void Main(string[] args)
  4. {
  5. InitialSerilog();
  6.  
  7. try
  8. {
  9. CreateWebHostBuilder(args).Build().Run();
  10. }
  11. catch (Exception e)
  12. {
  13. Log.Error(e.Message);
  14. throw;
  15. }
  16. }
  17.  
  18. private static void InitialSerilog()
  19. {
  20. Log.Logger = new LoggerConfiguration()
  21. .MinimumLevel.Information()
  22. .WriteTo.Console()
  23. .WriteTo.File("logs/log_.txt", rollingInterval: RollingInterval.Day)
  24. .CreateLogger();
  25. }
  26.  
  27. public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  28. WebHost.CreateDefaultBuilder(args)
  29. .UseStartup<Startup>();
  30. }

參考

Related Posts:

  • [IIS] IIS 站台服務異常中止 - HttpEvent 問題 今天同事反應測試主機 IIS Server 無法使用,進到 QA 主機後發現所有的 IIS 服務都已停止,第一直覺就是到事件檢視器查看是否有異常的 Log 資訊,發現事件檢視器紀錄其中來源  HttpEvent  嫌疑重大,以下就針對解決此問題的方式做說明,若有問題歡迎提出一起討論或是給予指導。 解決方案 由於公司測試機對外預設都是以 80 port 為主,無故發生異常是蠻很奇怪,過去… Read More
  • [VS2017] 如何設定 Visual Studio 2017 預設用 Administrator身份執行發生情境 身為一位專業的大內攻城師,相信很多人都使用過 Visual Studio Debug的經驗,可以透過 偵錯 > 附加至處理序 來找到錯誤,如果不熟悉的可以參考 mrkt 大的 Visual Studio 使用「附加至處理序」來進行偵錯 文章內有詳細的說明,今天重點不是介紹怎麼用,是在 attach IIS process 的過程中,都會跳出一個視窗詢問是否要使用 Admin 權限來進行偵錯,如下圖 之前遇到都很鴕鳥的… Read More
  • [IIS] 如何在 Windows 10 Pro 安裝 IIS 前言 最近有幸拿到公司配的新筆電,發現筆電上除了Visual Studio與SQL Server其他常用的都未安裝 難得有重新IIS站台的機會,雖然不難但最近初老症狀有點嚴重(?,這裡簡單紀錄一下IIS安裝過程 安裝過程 Control > Programs > Turn Windows features on or off Internet Information Services 項目打勾 展開 Internet Inform… Read More
  • [IIS] HTTP 錯誤 500.21 - Internal Server Error前言 換新筆電後在安裝公司專案過程遇到很多問題,昨天是SQL Server服務異常關閉,今天是專案出現問題是"HTTP 錯誤500.21 - Internal Server Error",但這樣也不錯,可以學到更多新知識與問題,這裡簡單紀錄一下處理過程 錯誤訊息 HTTP 錯誤 500.21 HTTP Status Code 狀態碼 是Server端 Response 的狀態,在 Status Code Definitions&nbs… Read More
  • [IIS] 程序無法存取檔案,因為檔案正由另一個程序使用。(發生例外狀況於HRESULT:0x80070020)問題 今天要在公司測試 Server 建立測試站台,在完成設定 Application Pool 與站台指定位置後按下啟動,跳出'程序無法存取檔案,因為檔案正由另一個程序使用。(發生例外狀況於HRESULT:0x80070020) 錯誤訊息,訊息內容看似有檔案被 lock 住造成啟動異常,但追根究底之後會發現其異常原因蠻單純的,以下就針對解決此問題的方式做說明,若有問題歡迎提出一起討論或是給予指導。 解決方案 根… Read More

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com