1053 windows-Dienst reagiert nicht rechtzeitig

Habe ich eine Web-app läuft im IIS und kommuniziert mit einem Windows-Dienst über WCF gehostet in der gleichen Maschine. Intern Windows-Dienst ausgeführt, verschiedene job-und manchmal ist es sehr beschäftigt mit der Bearbeitung der Benutzeranforderungen. Zu 1. ich hatte das Problem mit dem Starten des Dienstes, weil es einige imes viel Zeit, um Start & letztendlich den Fehler auslöst z.B. Service-Timeout. Um dies zu beheben zog ich den code auf einen anderen Thread, statt der Haupt-Thread. Funktioniert alles wunderbar, aber jetzt habe ich beobachtet, dass einige Male bin ich immer die Fehler auf Dienst Stoppen, d.h.

**1053 windows service did not respond in timely fashion**

Mein Service OnStop () - code:

protected override void OnStop()
        {
            //Stop the WCF service
            if (myServiceHost != null)
            {
                myServiceHost.Close();
                myServiceHost = null;
            }

            //Stop the scheduler

            if (myScheduleManager != null)
            {
                myScheduleManager.Stop();
            }

            //Update the registry value
            Logger.GetInstance().LogEvent(this.GetType().Name, LogLevel.INFO, "Updating registry...");
            Settings.GetInstance().LastStopTime = DateTime.Now.ToString();

            Logger.GetInstance().LogEvent(this.GetType().Name, LogLevel.INFO, "Service stopped.");
        }

Es in der Regel geschieht, wenn der Service ist zu beschäftigt. Aber schließlich hört es nach 30-40 Minuten Zeit. Ich weiß, dies geschieht durch Time-out-Problem in Windows-Dienst, weil die default-Zeit ist sehr wenig & er behandelt es als Time-out.

Meine Frage, was ist die beste Praxis, um solche Flaschenhälse sind ich bewege mein Stopp-bezogene Aufgaben unter einem anderen Thread & asynchrone Aufruf zum freigeben von Ressourcen in diesem Thread. Was aber passiert, wenn während der Freigabe von Ressourcen, wird der Benutzer den Dienst Starten?

  • myScheduleManager ist der Quarz JobScheduler die Zeitpläne verschiedene lang laufende jobs auf Dienst Starten.Während beim Stoppen der Aufruf myScheduleManager.Die Stop () - Aufrufe Quarz-Abschaltung Methode ich.e myQuartzScheduler.Shutdown(true) Quarz wartet, bis alle den job zu beenden, das ist, warum es nimmt viel Zeit in Anspruch.Kann ich nicht machen, myQuartzScheduler.Shutdown(false) coz es wird meine Arbeit in einem instabilen Zustand. Ich kann die Trennung von diesem zu einem anderen async-Methode OnStop() von Service & können die Musterwiderrufsbelehrung aber was passiert, wenn der Benutzer wird erneut Starten Sie den Dienst, während es die Arbeit zu beenden, in den hintergrund?
  • in diesem Fall ist, dass eine option, die Sie können, wissen den service zu stoppen und sollte Sie nicht weiter zu starten, bis job beendet ist, im hintergrund ?
Schreibe einen Kommentar