永远不会调用Windows服务Tick ElapsedEventArgs

时间:2014-09-08 16:51:00

标签: c# service timer windows-services

我尝试将一个在本地运行良好的服务部署到生产服务器。但是在这台服务器上,ElapsedEventHandler似乎永远不会调用我的方法Tick()

我读过其他类似的主题 First Windows Service - timer seems not to tick 要么 Timer tick event is not called in windows service 但我无法解决我的问题:/

我还尝试使用_timer.Enabled = 1而不是_timer.Start(没有正常情况但仍然尝试过)并尝试重新安装服务几次。

我使用Class 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 End OnStart

当我停止服务时,我也得到了这个......

  

2014-09-08 16:40:52.4072 TRACE End OnStop

1 个答案:

答案 0 :(得分:0)

实际上我向Steve Wellens道歉,他对Compute做什么感到正确。 问题与Compute()有关。 它有一些代码需要一个丢失的DLL。 我不知道为什么_logger.Trace(“Tick”);未被调用且没有触发异常:/ 我不得不每行评论我的程序行,以找出问题的来源......