web api中的计时器事件

时间:2016-04-19 02:36:42

标签: asp.net-web-api

我创建了一个计时器事件尝试在我的web api的后台运行,我发现它在本地开发机器上调试时工作正常。但是,当我将它们添加到服务器上的IIS时,计时器不起作用。它在第一个Web请求完成后停止(我通过将一些文本写入日志文件来测试它,在几次触发后,一旦Web请求完成,它似乎停止了) 这是一些示例代码。

void refreshTimeStart()
    {
        refreshTimer = new System.Timers.Timer(Convert.ToInt32(ConfigurationManager.AppSettings["TIMER_INTERVAL"]));
        refreshTimer.Elapsed += new ElapsedEventHandler(connectionResetEvent);
        refreshTimer.AutoReset = true;
        refreshTimer.Enabled = true;
    }
void connectionResetEvent(object source, ElapsedEventArgs e)
    {
        testIndex = testIndex + 1;
        WriteToFile(testIndex);
               }
static void WriteToFile(int i)
     {
         string text = "This start trigged. ";
         System.IO.File.WriteAllText(@"C:\Projects\abc" + i.ToString() + ".txt", text);
     }

知道怎么做到这一点?非常感谢。

1 个答案:

答案 0 :(得分:2)

很久以前问过这个问题,但无论如何这里都是答案。

首先,在Web API中使用计时器可能不是最好的主意。 Windows服务更合适。话虽这么说,你的问题必须来自两个问题:

  1. Web API等待请求,仅在第一个请求后初始化。因此,您必须发起启动计时器的请求。
  2. IIS中应用程序池的默认设置有超时。因此,即使您初始化Web API,应用程序池也会在超时期限结束后终止。你可以禁用超时。