[英]Windows Service Tick ElapsedEventArgs is never called
我试图部署一项在生产服务器本地运行良好的服务。 但是在此服务器上,ElapsedEventHandler似乎从未调用我的方法Tick()
我已经阅读了与“其他Windows服务”类似的其他线程-计时器似乎未打勾或Windows服务 中未调用计时器打勾事件,但我对我的问题没有任何答案:/
我还尝试使用_timer.Enabled = 1而不是_timer.Start(正常情况下未发生任何事件,但仍尝试过),并且还尝试了几次重新安装服务。
我使用System.Timers类中的Timer。 这是我的代码:
static void Main()
{
var servicesToRun = new ServiceBase[]
{
new SynchronizeEvents()
};
#if DEBUG
servicesToRun.LoadServices();
#else
ServiceBase.Run(servicesToRun);
#endif
}
和
public partial class SynchronizeEvents : ServiceBase
{
private readonly Logger _logger = LogManager.GetCurrentClassLogger();//Nlog
private Timer _timer;//From Class System.Timers
private readonly DbSetName _db = new DbSetName ();
private static readonly Dictionary<Employee, otherStuff> Subscriptions = new Dictionary<Employee, otherStuff>();
public SynchronizeEvents()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
_logger.Trace("Service Start");
_timer = new Timer(5000) { AutoReset = false };//Same problem without AutoReset = false
_timer.Elapsed += Tick;
_timer.Start();
_logger.Trace("End OnStart");
}
protected override void OnShutdown()
{
_logger.Trace("OnShutdown");
_timer.Stop();
base.OnShutdown();
}
protected void Tick(object sender, ElapsedEventArgs elapsedEventArgs)
{
_logger.Trace("Tick");
_timer.Stop();
Compute();
_timer.Start();
}
protected override void OnStop()
{
_logger.Trace("OnStop");
}
在DebugMode上以及在发布模式下的本地计算机上,一切工作都很好,但是当我在生产服务器上安装它时,我得到的唯一日志是:
2014-09-08 16:35:57.1929 TRACE服务开始
2014-09-08 16:35:57.2085 TRACE结束OnStart
当我停止服务时我也得到了这个...
2014-09-08 16:40:52.4072 TRACE End OnStop
实际上,我必须向史蒂夫·韦伦斯(Steve Wellens)道歉,他是正确的询问Compute的工作。 问题与Compute()有关。 它具有一些需要缺少DLL的代码。 我不知道为什么_logger.Trace(“ Tick”); 没有被调用并且没有触发异常:/我不得不逐行注释我的程序行,以找出问题的根源...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.