Windows服务上的计时器不能在服务器上运行

时间:2015-07-06 08:51:10

标签: c# .net windows timer

我有一个使用计时器的Windows服务。计时器每隔几秒就会工作一次并检查数据库中的一些变化,如果有任何变化,那么Windows服务会执行操作。

我做了所有事情,在我的机器上进行了大量测试,在我的机器上,Windows服务工作正常。

当我在服务器上部署时,Windows服务会在i start Windows服务时检查数据库更改,但它不会检查数据库中的任何更改。我不知道这个问题,我连续三天坚持到这里,我检查了一切。

在我的机器上,我使用框架32进行部署,在服务器上,我也使用框架32进行部署。

我还尝试使用框架64在服务器上部署,但仍然存在同样的问题。

我为任何失败做了日志,根本没有错误日志。

你能否给我一些关于问题可能提出的提示?

我使用这样的计时器运行Windows服务:

private System.Timers.Timer timer;

public ServiceStatus()
{
    InitializeComponent();

}

protected override void OnStart(string[] args)
{
    try
    {
        this.timer = new System.Timers.Timer(30000);  // 30000 milliseconds = 30 seconds
        this.timer.AutoReset = true;
        this.timer.Elapsed += new System.Timers.ElapsedEventHandler(this.timer_Elapsed);
        this.timer.Start();
    }
    catch (Exception ee)
    {
        this.EventLog.WriteEntry("ERROR ERROR ERROR="+ee.Message);
    }
}

protected override void OnStop()
{
    this.timer.Stop();
    this.timer = null;
}

private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    new StatusHandler().check();
}

已经有三天了,我无法解决,请欣赏任何提示。

1 个答案:

答案 0 :(得分:1)

问题是因为OnStart中的try / catch块只会处理设置事件的代码中抛出的异常。当事件本身运行时,它不会捕获任何异常。

如果您的StatusHandler().check()方法中出现异常,服务将退出,不会记录任何内容。

因此,您需要在StatusHandler().check()方法中添加try / catch,以便捕获任何异常,记录它们并对其进行适当处理。