我有一个使用计时器的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();
}
已经有三天了,我无法解决,请欣赏任何提示。
答案 0 :(得分:1)
问题是因为OnStart
中的try / catch块只会处理设置事件的代码中抛出的异常。当事件本身运行时,它不会捕获任何异常。
如果您的StatusHandler().check()
方法中出现异常,服务将退出,不会记录任何内容。
因此,您需要在StatusHandler().check()
方法中添加try / catch,以便捕获任何异常,记录它们并对其进行适当处理。