0

I wrote a windows service ,that will my class library every 15 mins interval to execute the class.

It works fine when i deployed the windows service in my machine,the timer works well and every 15 mins it calls my class library but when i deployed in my server,it works fine only on onstart after that its not raise the timer or every 15 mins suppose to call my class lib are not happening,some one please guide me what suppose to look here to identify the problem

here is my code

    public partial class Service1 : ServiceBase
{
    private Timer _timer;
    private DateTime _lastRun = DateTime.Now;

    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        log4net.Config.XmlConfigurator.Configure();

        _timer = new Timer(10 * 60 * 1000); // every 10 minutes
        _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        Shell Distribute= new Shell();
        Distribute.Distribute();
_timer.start();//this line was missed in my original code
    }

    protected override void OnStop()
    {
        this.ExitCode = 0;
        base.OnStop();

    }
    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
       //if (_lastRun.Date < DateTime.Now.Date)
        //{

try
{
_timer.Stop();
Shell Distribute= new Shell();
Distribute.Distribute();
}
catch(exception ex)
{}
finally
{

            _timer.Start();
}
         //}
        }

    }
}

I strongly believe log on issues but am not sure for two reasons,if i start or restart this service in my test server using the same account works well but only timer is not working. The code is exactly same so i don't worry much about my code bcoz it work timer based in my local machine using the same account. Thanks in Advance.

Usher
  • 2,146
  • 9
  • 43
  • 81
  • 1
    Take a look at advices at this question http://stackoverflow.com/questions/397744/net-windows-service-with-timer-stops-responding – Nikolay Apr 10 '12 at 06:08
  • look event viewer for possible error logs. – Özgür Kara Apr 10 '12 at 06:18
  • @Özgür Kara ,very first thing i did is checked the evenvwr but it doesn't have any info about my service,all i can see in "Application" log when the service get started. – Usher Apr 10 '12 at 07:00

1 Answers1

0

Am not sure why my service working now based on timer,all i did is add the log in the code like below to find out what's going on but fortunately it works like a charm.

 protected override void OnStart(string[] args)
    {

        log4net.Config.XmlConfigurator.Configure();
        log.Debug("Service Called when Onstart");
        _timer = new Timer(10 * 60 * 1000); // every 10 minutes
        log.Debug("calling Distributor Method");
        Shell Distributor = new Shell();
        Distributor.Distribute();

        log.Debug("calling timer Elapsed");
       _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
       log.Debug("start the timer");
       _timer.Start();

    }

    protected override void OnStop()
    {
        log.Debug("stop the timer in OnStop method");
        this.ExitCode = 0;
        base.OnStop();

    }
    private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {

        log.Debug("IN Timer Elapsed method");
        try
        {
            log.Debug("IN try block and calling timer stop function");
            _timer.Stop();
            log.Debug("Distributor Method Called from try block");
            Shell Distributor = new Shell();
            Distributor.Distribute();


        }
        catch (Exception ex)
        {
            log.Debug("IN Catch Block");
            log.Debug(ex.Message); 
        }
        finally
        {
            _lastRun = DateTime.Now;
            log.Debug("IN Final Block");
            log.Debug("start the timer");
            _timer.Start();
            log.Debug("Exit the Timer Elapsed Method");
        }
Usher
  • 2,146
  • 9
  • 43
  • 81