2012-01-06 65 views
0

我有一個ASP.NET Web應用程序,在UI層我有一個C#類(而不是asp.net頁),我想在定時器過去時使用定時器控件發送電子郵件。我將在application.start()方法中啓動計時器。我想將它設置在後臺,將繼續在後臺工作請建議或者它是可行的解決方案?如果沒有,那麼什麼可以替代解決方案?我已經讀過,定時器控件在Web應用程序中是不可能的,因爲它是無狀態環境,但我想在C#類中使用它,而不是在ASP.net頁面中。請建議解決方案。ASP.Net計時器控制需要

謝謝

+0

你解決了你的問題嗎? – BrOSs 2012-10-31 19:03:54

回答

0

這是爲我工作。測試它首先要知道定時器不會被GC服務器上收集:

的Web.config

<configuration> 
    <system.net> 
    <mailSettings> 
     <smtp> 
     <network defaultCredentials="false" host="mail.domain.com" password="psw" userName="user"/> 
     </smtp> 
    </mailSettings> 
    </system.net> 

的Global.asax.cs

public class Global : System.Web.HttpApplication { 

    Timer cron; 

    protected void Application_Start(object sender, EventArgs e) { 
     cron = new Timer(1000 * 60 * 5); 
     cron.AutoReset = true; 
     cron.Start(); 
     cron.Elapsed += (s, a) => { 
      var address = "[email protected]"; 
      var mail = new MailMessage("Test <[email protected]>", address); 
      mail.Subject = "Test"; 
      mail.Body = "Timer test at " + DateTime.Now.ToLongTimeString(); 
      mail.IsBodyHtml = true; 
      var smtp = new SmtpClient(); 
      smtp.Send(mail); 
     }; 
    } 

    protected void Application_End(object sender, EventArgs e) { 
     cron.Stop(); 
    } 
} 

請記住,這個解決方案以及其他的(thread loop,cache expiration)是hacky。 Windows任務計劃程序旨在執行此類工作。