2012-06-28 6 views
10

Windows 서비스에서 호출되는 순서는 무엇입니까? 우리는 타이밍 문제가 있으며 생성자가 처리를 완료하는 데 너무 오래 걸리는 것이 원인이라고 생각합니다.Windows 서비스의 메서드 호출 순서

이것은 우리가 그러나 Error 1053 the service did not respond to the start or control request

가있는 생각 유사한 문제는, 우리가 궁금해 어떤 순서 및/또는 방법 홈페이지, ONSTART,의 InitializeComponent 등이 전화를받을 때 호출되어야 할 때.

또한 OnStart 메서드가 모든 처리를 배치하는 데 가장 적합할까요?

** 솔루션

테스트 서비스를 만들기 위해 약간의 시간을 만들었다 아래에 응답을 시험하고 시간을 발견 그것의 원인뿐만 아니라 생성자 Main 메서드에서 호출 된 것으로 Main 메서드 처리에서 오는 타임 아웃하기. 모든 것을 OnStart로 옮기고 실을 그냥 돌리는 것만으로도 효과가있는 것처럼 보였습니다. 여기에 세부 정보가 있습니다. http://www.adamthings.com/post/2012/06/28/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a-timely-fashion/

+0

OnStart는 모든 처리를 처리하는 다른 스레드를 시작해야하므로 메서드가 즉시 반환 될 수 있습니다. 내 경험에 의하면 이것은 가장 잘 작동합니다. 나는 InitializeComponent에 아무것도 넣지 않을 것이다. – Mangist

+0

OnStop은 스레드를 중단하고 완료 될 때까지 기다려야합니다. – Mangist

+1

중단 점을 배치하여 찾을 수 있습니다. – usr

답변

6

OnStart() 방법으로 차단하지 않는다. 당신이하는 것처럼 들리 네요.

OnStart() 메서드에서 별도의 스레드를 만들고 거기에서 벗어나십시오.

나는이 테스트를하지 않은,하지만 비슷한 :

protected override void OnStart(string[] args) 
{ 
    var worker = new Thread(DoWork); 
    worker.IsBackground = false; 
    worker.Start(); 

    base.OnStart(args); 
} 

private void DoWork() 
{ 
    while (!_stopRequested) // (set this flag in the OnStop() method) 
    { 
     // processing goes here 
    } 
} 

이벤트, 각 방법에서 바로 설치 추적 문장의 순서에 대한 질문에 대답하기 위해. 내가 얼마나 도움이 될지 모르겠다. 메시지 (시작 요청에 응답하지 않음 ...)가 비교적 빨리 실행되어야하는 메소드에서 차단 (또는 너무 오래 걸림)을 나타냅니다.

+0

이것은 내 생각이 움직이는 데 큰 도움이되었습니다. 답변 해 주셔서 감사합니다. 원본 게시물에 대한 의견에 내 발견 사항을 게시했습니다. – Adam

6

나는 (이 정말 시작이 호출 기본적 때 ... 수요이라고

  • InitializeComponent
  • OnStart을 (Main 호출한다) 순서가

    코드를 넣을 위치는 Main에 캐시 할 수있는 코드와 각 시작시 재활용 할 코드를 OnStart 안에 넣는 것이 좋습니다. 그러나 OnStart에서는 실제 처리를 수행하지 말고 초기화 만하면됩니다. 별도의 스레드를 사용하여 논리를 대량으로 처리하십시오. 또한

    상기 MSDN is helpful with this

  • +0

    응답 해 주셔서 감사합니다 도움이되었습니다. 원본 게시물에 대한 의견에 내 발견 사항을 게시했습니다. – Adam