2016-10-21 3 views
0

TopShelf을 사용하여 첫 .Net 서비스를 작성했으며 서비스 코드가 한 번만 실행되는 문제가 있습니다.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