繁体   English   中英

Windows服务上的计时器在服务器上不起作用

[英]Timer on windows service doesn't work on the server

我有一个使用计时器的Windows服务。 计时器每隔几秒钟工作一次,并检查数据库中是否有某些更改,然后进行更改(如果有任何更改),则Windows服务会执行操作。

我做了所有的工作,在机器上进行了严格的测试,在机器上,Windows服务运行正常。

当我部署在服务器上时,Windows服务仅在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();
}

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

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

如果您的StatusHandler().check()方法中引发了异常,则该服务将退出并且不记录任何内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM