0

我写了一个 Windows 服务,我的类库每隔 15 分钟就会执行一次。

当我在我的机器上部署 Windows 服务时它工作正常,计时器运行良好,每 15 分钟它调用我的类库,但是当我部署在我的服务器中时,它只在 onstart 之后工作正常,它不会提高计时器或每 15分钟假设调用我的类库没有发生,请有人指导我应该在这里查看什么以识别问题

这是我的代码

    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();
}
         //}
        }

    }
}

我坚信登录问题,但不确定有两个原因,如果我在我的测试服务器中使用相同的帐户启动或重新启动此服务效果很好,但只有计时器不起作用。代码完全相同,所以我不太担心我的代码,因为它使用相同帐户在我的本地机器上工作计时器。提前致谢。

4

1 回答 1

0

我不确定为什么我的服务现在基于计时器工作,我所做的只是在下面的代码中添加日志以了解发生了什么,但幸运的是它就像一个魅力。

 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");
        }
于 2012-04-13T04:58:19.540 回答