2016-10-21 9 views
0

Я написал свой первый .Net-сервис, используя TopShelf, и у меня возникла проблема, когда код службы выполняется только один раз.Служба Windows выполняется только один раз

Я настроил основную услугу следующего

private static void Main(string[] args) 
    { 
     HostFactory.Run(x => 
     { 
      x.Service<ServiceProcess>(s => 
      { 
       s.ConstructUsing(name => new ServiceProcess()); 
       s.WhenStarted(tc => tc.Start()); 
       s.WhenStopped(tc => tc.Stop()); 
      }); 

      x.StartAutomatically(); 
      x.RunAs(Username, Password); 
     }); 
    } 

И метод, который работает только один раз, заключается в следующем.

using System.Timers; 

public class ServiceProcess 
{ 
    private readonly Timer _timer; 

    public ServiceProcess() 
    { 
     _timer = new Timer(1000) { AutoReset = false }; 
     _timer.Elapsed += (sender, eventArgs) => EventLog.WriteEntry(ServiceName, "It is " + DateTime.Now, EventLogEntryType.Information); 
    } 
} 

В журнале событий я могу видеть, что сообщение написано правильно, но это происходит только один раз. Поскольку это самая простая конфигурация, я не уверен, почему это не работает. Я играл со временем и пытался добавить обработку исключений, но в конечном итоге он просто не запускается снова.

Обратите внимание, что мои методы Start() и Stop() делают _timer.Start() и _timer.Stop() соответственно.

ответ

2

Установите свойство AutoReset вашего таймера на значение true.

+0

В моей защите мне была дана плохая информация со стороны коллеги. ;) С удовольствием дадим вам легкие очки. – McArthey

+0

Я хотел бы предоставить эту ссылку для тех, кто ищет. Это не относится к TopShelf, но это свойство службы: https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(v=vs.110).aspx – McArthey