문제

서비스 당 서비스 시작 시간 초과에 대해 다른 값을 설정하는 방법이 있습니까? ServicesPipetimeOut 레지스트리 키를 사용하여 변경할 수는 있지만 컴퓨터 당입니다.http://support.microsoft.com/kb/824344).

현재 내가 생각한 유일한 것은 다른 스레드에서 모든 시간 소모적 인 시작 작업을 수행하는 것이 었습니다.

도움이 되었습니까?

해결책

서비스 시작을 가능한 빨리 완료하는 것이 좋습니다. 그래서 시작 상태, 성공적으로 시작한 것을 절대적으로 인정 해야하는 것만하십시오. 나머지는 나중에하십시오. 만약 시작 여전히 긴 프로세스입니다 setservicestatus 주기적으로 알리기 위해 서비스 제어 관리자 아직 끝나지 않았으므로 서비스 시간이 걸리지 않습니다.

다른 팁

가능한 빨리 서비스를 시작하기 위해 마무리에 Romulo와 동의합니다. 그러나 시간이 필요하고 .NET Framework 2.0 이상을 사용하는 경우 ServiceBase.RequestAdDitionalTime () 메소드를 고려할 수 있습니다.

http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}

단순히 다른 스레드에서 시간이 많이 걸리는 것입니다

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }

또한 좋은 출발을하기 위해 몇 초/분이 걸리는 서비스를 처리해야했습니다. 서비스가 시작되면 SQL 서버에 연결하려고합니다. 그러나 전체 서버가 다시 시작되면 SQL Server 이전에 내 서비스가 시작되었습니다. (서비스 의존성에 대해 알고 있지만 특정 이유로 내 상황에는 적용되지 않습니다 ....). SQL Server에 연결하기 위해 10 번 시도한 루프를 시도했지만 시간 초과로 인해 두 번째 시도 전에 Windows가 서비스를 죽이고있었습니다.

내 해결책 : 서비스의 "onstart ()"에 타이머를 추가했습니다. 그런 다음 서비스의 "Ontick ()"메소드가 SQL 서버에 연결하기 위해 10 번 시도했습니다 (30 개가 대기 중). 더 이상 스타트 업 시간이 없습니다.

그래서 기본적으로,

  • 내 서비스는 5 초 안에 시작됩니다.
  • 서비스가 시작된 후 10 초 후 타이머가 시작됩니다.
  • 타이머는 SQL 서버에 연결하기 위해 매번 10 번 (매번 30 초 대기) 시도합니다.
  • 성공하면 타이머가 스스로를 비활성화하지 않으면 (10 번 시도한 후) 서비스를 중지합니다.

문제를 해결하는 더 우아한 방법에 주목하지만 내 솔루션의 일부는 나와 같은 상황에 처한 사람에게 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top