Я написал свой первый .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()
соответственно.
В моей защите мне была дана плохая информация со стороны коллеги. ;) С удовольствием дадим вам легкие очки. – McArthey
Я хотел бы предоставить эту ссылку для тех, кто ищет. Это не относится к TopShelf, но это свойство службы: https://msdn.microsoft.com/en-us/library/system.timers.timer.autoreset(v=vs.110).aspx – McArthey