[英]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.