我有一个ASP.NET Web应用程序,在UI层我有一个C#类(不是asp.net页面),我想在定时器过去时使用定时器控件发送电子邮件。我将在application.start()方法中启动计时器。我想在后台设置它将继续在后台工作请建议它是否可行的解决方案?如果没有那么什么可以替代解决方案?我已经读过在Web应用程序中无法进行计时器控制,因为它是无状态环境但是我想在C#类中使用它而不是在ASP.net页面中。请提出解决方案。
由于
答案 0 :(得分: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 = "your@email.com";
var mail = new MailMessage("Test <test@domain.com>", 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)都很苛刻。 Windows任务计划程序旨在完成此类工作。