排程的作法

開發網頁或者很多APP都會需要排程支援 這邊簡述一些排程的作法

目前排程作法我比較常用的有兩種  
一種是另一篇文章介紹過的Quartz套件 
它的優點是方便使用,只要在程式碼內處理就好,缺點是沒有辦法指定精確的時間,像是這次我的需求是每個月的10號03:00執行,而且當網站太久沒被登入而休眠,就不會執行了(當網站Awake 才會跑排程工作)

今天是紀錄另一個排程方法,就是最原始的方法 Window的排定的工作

把要做的邏輯  寫到API (MVC) 或者 ASHX (WebForm)
然後寫一個.bat檔 使用PowerShell去呼叫他
powershell Invoke-WebRequest -URI 網址

然後設定排定的工作在想要的時間去執行這個BAT檔就好

可是今天另一個問題發生,Server環境是Server2003 他沒有PowerShell
這時候就用更歪的方法
(以下只使用WebForm  MVC還沒做過 應該也差不多)
就把業務邏輯,寫在.aspx.cs頁面檔的Page_Load內
當頁面執行起來就會去做了
但是真的會把瀏覽器打開 因此要記得關掉瀏覽器 廠廠
最後在PageLoad尾巴加上這段ClientScript  讓排程執行完會把頁面關掉

ClientScript.RegisterClientScriptBlock(this.GetType(), "close", "window.opener = null;window.open('', '_self');window.close();", true);

然後我的.bat也要改寫
C:        
CD C:/ProgramFile/Internet Explore
iexplore http://myweb/job.aspx

第一行是如果.bat檔放置位置不在C巢,.bat檔執行起來會在當前的巢 要先轉到C巢才找的到IE
第二行移動到IE (iexplore.exe)所在的目錄下
第三行命令IE 開啟你寫業務邏輯的網頁 就會跑你要的工作了  

最後你寫的Script又會把IE關掉 
不過如果當下IE已經被其他的登入者開啟  就不知道排程會不會還順利執行了 (等待大大解答

感謝  第一次這麼認真地打文章