【问题标题】:how to call my method in windows service (c#)?如何在 Windows 服务(C#)中调用我的方法?
【发布时间】:2017-08-11 05:52:49
【问题描述】:

我想创建一个每天凌晨 4 点自动运行的服务,该方法在调用时会自动删除一些文件,我已经编写了代码,但是我在服务中调用的方法没有被执行。下面我附上了我的代码,请有人建议我一个解决方案。

public partial class Scheduler : ServiceBase
{
    System.Timers.Timer _timer;
    public Scheduler()
    {
        InitializeComponent();
    }
    protected override void OnStart(string[] args)
    {
        try
        {
            _timer = new System.Timers.Timer();
            _timer.Interval = 1 * 60 * 1000;//Every one minute
            _timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
            _timer.Start();
        }
        catch (Exception ex)
        {
            Library.WriteErrorLog(ex);
        }
    }
    public void timer_Elapsed(object sender, ElapsedEventArgs e)
    {
        Library.WriteErrorLog("Timer elapsed");    
        this.ExtractDataFromSharePoint();      
    }    
    public void ExtractDataFromSharePoint()
    {
        Library.WriteErrorLog("inside task");    
        ArchiveAdministration admin = new ArchiveAdministration();
        admin.ArchiveAuto();
        Library.WriteErrorLog("job completed");
        _timer.Stop();   
    }
}

而我的日志文件只有以下输出语句:

计时器已过
内部任务

我没有收到我包含的“作业已完成”声明..

【问题讨论】:

  • 我会在 ExtractDataFromSharePoint 中放置一个 try...catch 块,看看里面发生了什么

标签: c# windows-services


【解决方案1】:

由于您没有到达 Job completed 行,因此在您的 ExtractDataFromSharePoint 方法中添加一个 try catch 子句会很有帮助:

public void ExtractDataFromSharePoint()
{
   try
   {
     Library.WriteErrorLog("inside task");    
     ArchiveAdministration admin = new ArchiveAdministration();
     admin.ArchiveAuto();
     Library.WriteErrorLog("job completed");
     _timer.Stop();
   }
   catch(Exception ex)
   {
     Library.WriteErrorLog(ex.Message); //or try to log the stacktrace also    
   }    
}

捕获异常,如果您无法解决,请将其粘贴到此处以帮助您解决此问题

【讨论】:

  • hi @alaa_sayegh ,通过在 ExtractDataFromSharePoint() 方法中添加 try catch,我得到了以下日志详细信息。谢谢,但我不知道如何纠正这个... 2017 年 11 月 8 日 12:04:07:计时器已过 2017 年 11 月 8 日 12:04:07:内部任务 2017 年 11 月 8 日 12:04:17:无法打开登录请求的数据库“数据处理套件”。登录失败。用户“NT AUTHORITY\SYSTEM”登录失败。
  • 好的。授予用户 NT AUTHORITY\SYSTEM 访问数据库的权限。看到这个:stackoverflow.com/questions/2251839/…
  • 嗨@alaa_sayegh,我现在有一个问题,:(我的方法正在运行,但是在任务完成后,服务并没有像以前那样每一分钟运行一次
  • @ShaktiS,调度程序与您所做的数据库设置无关。您需要检查您的方法是否在 1 分钟内完成,您的服务是否工作到最后并到达停止点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-30
相关资源
最近更新 更多