서비스 당 서비스 시작 시간 초과에 대해 다른 값을 설정하는 방법이 있습니까? ServicesPipeTimeout 레지스트리 키를 사용하여 변경할 수 있지만 컴퓨터 당 (http://support.microsoft.com/kb/824344)입니다.Windows 서비스 시작 시간 초과
내가 생각한 유일한 순간은 시간이 많이 걸리는 시작 작업을 다른 스레드에서 수행하는 것이 었습니다.
서비스 당 서비스 시작 시간 초과에 대해 다른 값을 설정하는 방법이 있습니까? ServicesPipeTimeout 레지스트리 키를 사용하여 변경할 수 있지만 컴퓨터 당 (http://support.microsoft.com/kb/824344)입니다.Windows 서비스 시작 시간 초과
내가 생각한 유일한 순간은 시간이 많이 걸리는 시작 작업을 다른 스레드에서 수행하는 것이 었습니다.
가능한 한 빨리 서비스를 시작하는 것이 좋습니다. 따라서 시작시 상태 일 때 성공적으로 시작되었음을 확인해야하는 사항 만 수행하십시오. 그리고 나중에 나머지를해라. 시작이 인 경우 여전히 SetServiceStatus을 사용하여 서비스 제어 관리자에 아직 완료하지 않았 음을 알리면 서비스가 시간 초과되지 않습니다.
가능한 빨리 Romulo에 연락하여 서비스를 시작하는 것에 동의합니다. 그러나 시간이 필요하고 .NET Framework 2.0 이상을 사용하는 경우 ServiceBase.RequestAdditionalTime() 메서드를 고려할 수 있습니다.
protected override void OnStart()
{
this.RequestAdditionalTime(10000);
// do your stuff
}
감사합니다. 덕분에 많은 도움이되었습니다! 나는 오래된 코드를 가지고있어 실행하기 위해 ... – Turrau
Warning, possible caveat : "HostControl의 문서.RequestAdditionalTime은 최대 60 초 또는 120 초까지만 요청할 수 있다는 것을 나타내지 않습니다. 그렇지 않으면 요청을 무시합니다. "(여기에서 : https://stackoverflow.com/questions/19589686/topshelf-timeout-issue, 확인하지는 않았지만 고려해 볼 가치가 있음) –
http://msdn.microsoft.com/en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx
은 또한 수도 좋은 시작이 몇 초/분 소요 서비스를 처리했다. 서비스가 시작되면 SQL Server에 연결하려고 시도합니다. 그러나 전체 서버가 다시 시작되면 내 서비스가 SQL Server에서 시작되었습니다. (나는 서비스 의존성에 대해 알고 있지만 특별한 이유없이 내 상황에 적용되지 않는다.). SQL Server에 연결하기 위해 10 번 시도하는 루프를 만들려고했으나 Timeout 때문에 두 번째 시도 전에 Windows에서 서비스가 종료되었습니다.내 솔루션 : 내 서비스의 "onStart()"에 타이머를 추가했습니다. 그런 다음 서비스의 "onTick()"메서드가 SQL Server에 연결하기 위해 10 번 시도했습니다 (30 명이 대기 중임). 시동시 시간 초과가 없어졌습니다.
그러니까 기본적으로
는참고이 문제를 해결하려면 더 우아한 방법하지만 어쩌면 나보다 같은 상황에서 사람을 도움이 될 수 있습니다 내 솔루션의 일부,
단순히 다른 스레드에서 timeintensive 물건을 할
protected override void OnStart(string[] args)
{
var task = new Task(() =>
{
// Do stuff
});
base.OnStart(args);
task.Start();
}
'//Do stuff'은 예외를 던지므로 서비스를 중지하거나 크래킹하는 대신 삼켜 버릴 것입니다. 실제로 서비스가 작동하지 않고 "실행 중"이 아니라 실제로 아무것도하거나 제대로 작동하지 않는다는 것을 알 수 있습니다. . – deadlydog
곰 그러나 마음에 그 자체가 다른 서비스가 있다면 SERVICE_RUNNING을 올리면 서비스가 충분히 기능 할 것으로 기대할 것입니다. 이것이 SERVICE_RUNNING을 게시하기 전에 초기화 작업을 완료하고 SetServiceStatus를 사용하여 필요한 경우 더 많은 시간을 요청하는 것이 좋습니다. –