如何設定 ASP.NET Core 網站應用程式持續執行在 IIS 上

Kodofish
4 min readApr 8, 2021

--

若要讓網站應用程式定時做一些背景工作,在 IIS 預設的設定下,得在部署後發一個 Request 讓程式啟動,然後每 20 分鐘內再發一個 Request 讓 IIS 不會將程式給中止。

但這樣實在是太麻煩了,雖然有許多方式可以做到,但其實 IIS 本身是可以做到持續執行的,要做到這點有三個步驟。

  1. 安裝 Application Initialization Module
  2. 設定 Application Pool
  3. 設定 IIS Web site

安裝 Application Initialization Module

這是最重要的一步,有時候就是忘了安裝它造成網站應用程式無法持續執行。首先執行 Server Manager,再點選 Manager > Add Roles and Features

順著 Add Roles and Features Wizard 一直到 Server Roles 時, 在清單中找到 Web Server (IIS) > Web Server > Application Development > Application Initialization,把它選起來並安裝它。

設定 Application Pool

在 IIS 裡找到你的網站應用程式所使用的 Application Pool,按右鍵叫出選單,點選 Advanced Settings

調整以下的設定值

  • .NET CLR Version 為 v4.0
  • Start Mode 為 Always Running
  • Idle Time-out (minutes) 為 0

Idle Time-out 設定為 0 代表著 IIS 不會主動停掉應用程式。Start Mode 設定為 Always Running 代表 IIS 會立即啟用應用程式而不用等待收到 Request 才執行。

設定 IIS Web site

在 IIS 中,在網站上按右鍵叫出選單,點選 Manage Website > Advanced Settings

將 Preload Enabled 設定為 True。

驗證

照著步驟做應該就能夠設定完成了,你可以將工作管理員打開,找到網站應用程式的執行緒,點選 End Task 將它關閉。

有設定成功的話就會馬上再生出一個新的執行緒,可以看到 PID 會有所不同。

其實網路上蠻多講解這個方法的文章,但金魚腦的我每次都在 Google 找文,就乾脆自己整理一篇做個記錄。

參考文章

--

--

Kodofish
Kodofish

Written by Kodofish

從學生時就熱愛寫程式,第一份工作就在台灣500大企業的遊戲公司擔任軟體開發工程師,職涯中曾任 Team lead、PM、經理的管理職務,現在是某軟體公司的資深後端工程師。自從 2012 年接觸了 Agile 後,發現自己其實是個持續學習者並樂此不疲。

No responses yet