全局文件中的iis服务器上的计时器无法正常工作

时间:2018-07-09 13:14:46

标签: c# asp.net timer global-asax

我目前在asp.net Web应用程序中遇到两个问题

  1. 我有一个计时器,它每3600毫秒(1分钟)调用一次函数,但是如果系统很理想,请说几分钟,然后计时器停止,要再次启动计时器,我必须通过url或访问网站。重新启动服务器。为什么这样?

  2. 系统计时器稳步增加了间隔(以秒为单位),由于该间隔,我无法将时间与Datetime.now方法进行比较

这是我在global.asax文件中编写的简单代码:

void Application_Start(object sender, EventArgs e)
{
    System.Timers.Timer Timer = new System.Timers.Timer();
    Timer.Interval = 1000 * 60;
    Timer.AutoReset = true;
    //Timer.Elapsed += new ElapsedEventHandler(Run);
    Timer.Enabled = true;
}

void Run(object source, ElapsedEventArgs e)
{
    var time = DateTime.Now.Hour;
    var min = DateTime.Now.Minute;
    InspectionMailer insp = new InspectionMailer();
    // this condition gets failed after few minutes due to increase in time interval 
    if ((time == 15 && min == 0) || (time == 15 && min == 26) || time == 15 && min == 40)
    {
        insp.Send("EQT");
    }
}

1 个答案:

答案 0 :(得分:0)

进入IIS设置,然后将应用程序池的“空闲超时”更改为其他设置。我认为它默认为15分钟。

IIS > Application Pools > (Right-click) Advanced Settings > Idle time-out (minutes)

详细地说,您的应用程序池正在入睡。您必须增加空闲超时以防止其进入睡眠状态,或者创建一些附加内容,使其在计时器上命中URL,以防止其进入睡眠状态。