首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET Global.asax 定時呼叫 Web Service 實作與注意事項

     編輯:ASP.NET 基礎

應用場景

專案需定時呼叫外部 Web Service 同步資料,無法使用 SQL Agent 作業,採用 System.Timers.Timer 在 Application_Start 啟動背景排程。

Global.asax 完整實作

using System;
using System.Timers;
using System.Web;

namespace MyNet
{
    public class Global : HttpApplication
    {
        private static Timer _syncTimer;

        protected void Application_Start(object sender, EventArgs e)
        {
            _syncTimer = new Timer(30000); // 30 秒間隔
            _syncTimer.Elapsed += SyncTimer_Elapsed;
            _syncTimer.AutoReset = true;
            _syncTimer.Enabled = true;
        }

        private void SyncTimer_Elapsed(object sender, ElapsedEventArgs e)
        {
            try
            {
                var ws = new localhost.MyWebService();
                ws.InsertMyWebService(); // 呼叫外部服務
            }
            catch (Exception ex)
            {
                // 記錄錯誤日誌
            }
        }

        protected void Application_End(object sender, EventArgs e)
        {
            _syncTimer?.Dispose(); // 釋放資源
        }
    }
}

關鍵限制與改善方向

⚠️ 重要限制

  • 需至少有一位使用者造訪網站,Application 才會啟動,排程才會運作。
  • IIS 閒置回收會導致排程中斷。
  • 無法保證精確執行時間,受請求觸發影響。

💡 生產環境建議替代方案

  • Windows Service + 排程庫
  • Hangfire / Quartz.NET 持久化排程
  • Azure Functions / WebJobs 雲端排程

此法適用於簡單內部專案,正式環境建議採用更穩健的排程架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved