首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0036. 排程背景工作 QueueBackgroundWorkItem 在IIS部署網站站點後無法保持運行的原因與解決方法

日期:2022年 09月 01日

標籤: C# Asp.NET Framework Web Microsoft Internet Information Services (IIS)

摘要:C# 學習筆記


應用所需:1. asp.net
     2. IIS站台6.0以上
解決問題:QueueBackgroundWorkItem 背景程序部署後使其保持運行,正常工作
基本介紹:本篇分為2大部分。
第一部分:背景作業程序與失效原因
第二部分:保持正常運作的解法






第一部分:背景作業程序與失效原因

Step 1:背景程序的代碼

這是一段在Global.cs 上的 QueueBackgroundWorkItem 代碼
當站點運行時就會自動執行這段程式,紀錄現在時間

private void QueueBackGroundWorkItemExample()
{
    HostingEnvironment.QueueBackgroundWorkItem(item =>
    {
        while (true)
        {
            using (StreamWriter sw = new StreamWriter(@"D:\\info.txt", true))
            {
                sw.WriteLine($@"紀錄時間:{DateTime.Now}");
            }
            //10秒
            Thread.Sleep(10 * 1000);
        }
    });
}




Step 2:部署到IIS上

問題在每次部署到IIS上後,並不會執行上面的程式


Step 3:正常應該要產生文字檔

依照代碼意思應產生info.txt,但沒有




第二部分:保持正常運作的解法

Step 1:解決方法

解決方法有三個步驟要進行
1. 【伺服器管理員】要安裝應用程式初始化
2. 【IIS網站】進階管理要設定預先載入
3. 【應用程式集區】設定不回收、永遠啟用

Step 2:解決方法-伺服器管理員-1

進入到服務器管理器 -> 管理


Step 3:解決方法-伺服器管理員-2

選擇新增角色與功能


Step 4:解決方法-伺服器管理員-3

進入精靈


Step 5:解決方法-伺服器管理員-4

安裝應用程式初始化 - 完成


Step 6:解決方法-IIS網站-1

進入IIS網站 -> 進階設定


Step 7:解決方法-IIS網站-2

預先載入已啟用 -> True - 完成


Step 8:解決方法-應用程式集區-1

一樣在IIS,選擇應用程式集區 -> 進階設定


Step 9:解決方法-應用程式集區-2

進階設定 -> 啟動模式 -> AlwaysRuning
AlwaysRuning : 就不會判斷沒有使用時關閉


Step 10:解決方法-應用程式集區-3

回收-固定時間間隔(分鐘) -> 設為0 - 完成