我有完整的代码,用于将每日邮件发送到用户的过期邮件 . 我对代码的描述如下:
Global.asax :
void Application_Start(object sender, EventArgs e)
{
System.Timers.Timer myTimer = new System.Timers.Timer();
double inter = (double)GetNextInterval();
myTimer.Interval = inter;
myTimer.AutoReset = true;
myTimer.Elapsed += new ElapsedEventHandler(myTimer_Elapsed);
myTimer.Enabled = true;
}
private double GetNextInterval(){
string timeString;
timeString = "12:00 AM";
DateTime t = DateTime.Parse(timeString);
TimeSpan ts = new TimeSpan();
int x;
ts = t - System.DateTime.Now;
if (ts.TotalMilliseconds < 0)
{
ts = t.AddDays(1) - System.DateTime.Now;
}
return ts.TotalMilliseconds;
}
public void myTimer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
{
// My Mail Code
}
这段代码适用于第一次邮件,但我想每天发送邮件 .
怎么可能?
3 回答
创建一个控制台应用程序,该应用程序使用任务计划程序每天发送电子邮件并安排任务运行您的控制台应用程序 .
您也可以为.aspx文件创建计划任务 . 它将打开浏览器并发送邮件,而不是必须创建另一个计划任务来关闭它 .
这是一个例子:
https://mohammednv.wordpress.com/2008/01/08/how-to-create-scheduled-tasks-for-aspx-files/
您可以使用Quartz.NET在代码端安排任何过程
但有一个问题 . 如果asp.net应用程序保持不活动状态(未接收任何请求),它将从IIS进入休眠状态 .
所以你有2个选择 . Change IIS Settings保持您的应用程序池始终处于唤醒状态,或poke your application with dummy request以任何方法阻止其进入休眠状态
My suggestion and implementation is the following which i think is the most professional way of doing it.
将您的及时任务公开为wcf服务 .
开发一个运行Quartz的Windows服务,并及时调用这些wcf服务 .
专业人员可以将业务逻辑代码保存在一个位置,并且它也适用于服务器场方案