2011年4月1日

[ASP.NET] 在 Web 專案中進行排程工作

其實在很久之前坎尼就想研究這樣的東西了
概念大致上曉得,只是一直沒時間去實作出來
這幾天有些時間就去翻了一下資料,把它實作出來

坎尼在以前公司的做法有下列幾個:
  • 另外再寫一個 windows service 來執行
  • 用 Windows Form 寫成 AP,再用內建的工作排程來定期執行

    不多說,馬上進入正題

    I. 概念

    排程這個東西,就是指定好時間,時間一到程式就會自動執行
    在 ASP.NET 裡,坎尼主要是利用 System.Thread.Timer 來進行排程設定
    其他說明可詳見Bill叔所寫的 <三種時間人>
    接著在 Timer callback 事件中撰寫要系統做的事 (抓正妹圖之類的…)

    II.實作

    首先,新增一個 Web 專案 (似乎是廢話)
    在專案中新增一個 Global.asax
    wr_01 
    接著宣告一個全域的 Timer
    並在 Application_Start 中加入要進行 callback 的事件
    最後再設定 Timer 的週期,本範例中是以 5 秒當作一個循環 (50000毫秒)
    (第3個參數為 Timer 要在多少毫秒之後啟動事件wr_02
    範例中所做的事就只是把時間寫進一個文字檔
    (由於 sample 沒做好處理,很容易當掉 XD
    wr_03

    進行測試,在 Visual Studio 中按 F5 (讓虛擬伺服器啟動)

    注意,由於是另外開個 Thread
    所以在伺服器關掉之前都會持續進行 callback事件
    wr_04 
    測試結果,果然有成功的在 background 進行寫時間 log 的動作

    III. 小結

    本次的範例下載
    有興趣的人可以回去研究如何應用 :p

  • 7 則留言:

    Unknown 提到...

    最後再設定 Timer 的週期,本範例中是以 5 秒當作一個循環 (50000毫秒) --> 應該是 5000 毫秒

    坎尼 提到...

    沒想到愚人節要騙騙大家,看有沒有注意圖文是否一致~結果還是被 Tim 發現了~



    好啦~ 是我手滑多按一個0...

    匿名 提到...

    不小心查資料的時候路過看到這一篇文章
    給你個建議,如果要設定排程可以使用
    quartz.net

    啊啊啊蛋 提到...

    謝謝大大的好文
    剛好有需要寫排程去定期執行function
    這篇幫助我很大,感恩!

    Alen Wu 提到...

    請問這樣寫出來的程式,最後是一個執行檔?
    假設沒有設定停止時間的話,執行後會一直再背景啟動中,這樣嗎?

    坎尼 提到...

    Hi, Alen Wu

    文中範例是以網站為基礎,並不是執行檔,而且會在網站啟動的時候便會開始執行

    沒有設定停止條件的話是會一直執行,所以撰寫相關routine工作的程式碼時,要特別注意記憶體釋放相關問題

    若要開發相關背景執行服務也可以參考上面回覆的 quartz.net

    Alen Wu 提到...

    謝謝您的回覆,真是受益良多~^^

    Google Spreadsheet 裡用規則運算式

    最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D