2018年10月2日 星期二

.Net應用程序將執行中的資料保存到memory會消失的問題 & 發現Application_Start被呼叫多次

案例:
IIS上有一個ASP.NET MVC網站和處理驗證功能的ASP.NET WebAPI。
網站執行的過程中會將部分資料存放到記憶體(例如驗證後取得的使用者資訊),無論是放到static property或是使用MemoryCache,過一段時間(大約30秒左右)後會發現資料消失了(session loss),查原因的過程中發現Application_Start()被重呼多次,因次得知網站被重啟所以導致保存在記憶體的資料消失了。

搜尋網站被重啟的原因,查到了這一篇文章
Reasons for ASP.NET application restarts on IIS server

在文章中看到這兩則說明和註解:
  • Aach AppPool can issue one or multiple working processes depending on the AppPool settings (Maximum Workwer Processes [maxProcesses], default is 1)

It is not a good practice to use single AppPool for hosting multiple web applications. Despite isolation in AppDomains


案例中的ASP.NET MVC網站和ASP.NET WebAPI,都使用同一個AppPool,將這兩個應用程序改使用自己專用的AppPool後問題就解決了。