问题描述
|
我想在Web应用程序中定期在asp.net中运行调度过程。
简而言之,我的数据库表具有日期和截止日期Hrs。我想从这两者计算预期的dateTime,然后定期对另一个表进行更新(插入1000条记录),并且还希望根据该计算来运行邮件发送过程。
这是预期的计划过程,应定期执行。
解决方法
您可以使用Window Service在背景或计划中工作,请参见以下链接:
在Windows服务中使用计时器
, Quartz.NET作业计划程序库非常适合此类事情。
, 这是我所做的:
public class Email {
private static System.Threading.Timer threadingTimer;
public static void StartTimer()
{
if (threadingTimer == null)
threadingTimer = new Timer(new TimerCallback(Callback),HttpContext.Current,20000);
}
private static void Callback(object sender)
{
if (/* Your condition to send emails */)
using (var context = new MyEntities())
{
var users = from user in context.Usere
select user;
foreach (var user in users)
{
// Send an email to user
}
}
}
}
并且您必须将其添加到Application_Start:
void Application_Start(object sender,EventArgs e)
{
EMail.StartTimer();
}
, 看看Jeff Atwood的这篇旧文章:
ASP.NET中的简单后台任务
基本上,他建议您使用缓存过期机制来安排定时任务。问题是:您的Web应用程序需要运行。如果根本没有调用该网站怎么办?好了,由于IIS 7.5使得您可以始终保持Web应用程序运行:自动启动Web应用程序。杰夫在评论中建议他的方法行之有效,直到他们超过了。他的结论是,对于小型站点,这是一种很好的方法。