Laden...

Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung

Erstellt von pollito vor einem Jahr Letzter Beitrag vor einem Jahr 1.046 Views
pollito Themenstarter:in
314 Beiträge seit 2010
vor einem Jahr
Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung

Hallo,

heute melde ich mich wieder einmal mit einem Problem, das ich trotz Suche nicht gelöst bekomme.

Ich habe einen Windows-Dienst für .Net 6 programmiert, der von BackgroundService erbt:


namespace WooComMesserschmidt
{
	internal class Worker : BackgroundService
	{
		private	readonly HttpClient						Client			= new()
		private	string									BaseAddress		= string.Empty;
		private	readonly IConfiguration					Configuration;
		private	string									ConfigFile		= string.Empty;
		private readonly Dictionary<string, dynamic?>	_ConfigPar;
		internal static	 Dictionary<string, string>		ConfigPar		= new();
		private readonly ILogger<Worker>				_logger;

		public struct LogInfo
		{
			public ILogger<Worker>? Logger;
			public string?			LogFile;

			public LogInfo(ILogger<Worker>? logger, string logfile)
			{
				Logger	= logger;
				LogFile	= logfile;
			}
		}

		public static LogInfo logInfo;

		public Worker(ILogger<Worker> logger, IConfiguration configuration, Dictionary<string, dynamic?> configpar)
		{
			Configuration	= configuration;
			_ConfigPar      = configpar;
			_logger         = logger;

			Init();
		}
...

Nun finden in der Methode "Init()" relativ umfangreiche Aufgaben statt. Wenn diese durch sind, geht es hier weiter:


		protected override async Task ExecuteAsync(CancellationToken stoppingToken)
		{
			// Abfrageintervall in Millisekunden
			if (int.TryParse(ConfigPar[cpQueryInterval], out int QueryInterval) == false)
			{
				QueryInterval = QueryIntervalStd;
				Log.LogInformation(logInfo, $"Abfrageintervall konnte nicht ermittelt werden. Es wird daher der Standardwert von {QueryInterval} Millisekunden verwendet. Prüfen Sie die Angaben in der Parameterdatei.");
			}

			Log.LogInformation(logInfo, $"{Process.GetCurrentProcess().ProcessName} gestartet.");
			Log.LogInformation(logInfo, $"Worker arbeitet mit Abfrageintervall von {QueryInterval} Millisekunden.");

			while (stoppingToken.IsCancellationRequested == false)
			{
				// Neue Bestellungen verarbeiten.
				await ProcessNewOrders();

				// Artikel aktualisieren – zurzeit nur den Preis aktualisieren.
				await UpdateProducts();

				// DHL-Dateien verarbeiten.
				Dhl_Polling();

				// Nun legen wir uns aufs Ohr für ein Weilchen.
				await Task.Delay(QueryInterval, stoppingToken);
			}
		}
...

Der Dienst soll alle paar Minuten Bestellungen aus einem E-Shop holen, Artikel aktualisieren und DHL-Sendungen verarbeiten.

Nun, wenn ich das Programm in der Kommandozeile manuell starte (also nicht als Dienst), funktioniert alles, wie erwartet. Nun habe ich das Programm als Dienst registriert und bekomme jedes Mal beim Versuch, den Dienst zu starten, folgenden Fehler:

Fehlermeldung:
Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung

Gestartet wir alles in Main:


		private static async Task<int> Main(string[] args)
		{
			try
			{
				IHost host = Host.CreateDefaultBuilder(args)
					.UseWindowsService(options =>
					{
						options.ServiceName = ServiceName;
					})
					.ConfigureServices(services =>
					{
						services.AddSingleton<Dictionary<string, dynamic?>> (_ConfigPar);
						
						services.AddHostedService<Worker>();
					})
					.Build();

				await host.RunAsync();

				Log.LogInformation((LogInfo)_ConfigPar[cpLogInfo], $"{Process.GetCurrentProcess().ProcessName} beendet.");

				if (Debugger.IsAttached == true)
				{
					Console.ReadLine();
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine($"{ex}{Environment.NewLine}{Environment.NewLine}");
...

Wie gehe ich vor, um diesen Fehler zu vermeiden?

Vielen Dank und lG

René

René

16.842 Beiträge seit 2008
vor einem Jahr

Wie gehe ich vor, um diesen Fehler zu vermeiden?

Windows schießt einen Service ab, wenn der Start länger dauer als (default) 30 Sekunden.
Steht auch in der Fehlermeldung. Kann dutzende Ursachen haben..

Willst den Abschuss vermeiden, darfs eben nicht länger dauern.
Logischerweise hast Du den Abschuss nicht, wenn Du das manuell startest...

pollito Themenstarter:in
314 Beiträge seit 2010
vor einem Jahr

Danke. Was mich aber dabei sehr wundert, ist die Tatsache, dass der Fehler ziemlich schnell Auftritt – keine 30, sondern maximal zwei Sekunden.

René

D
261 Beiträge seit 2015
vor einem Jahr

Bau doch mal ein Debugger.Launch ein und versuch den Fehler zu debuggen.
Ich vermute eine ungefangene Exception oder so etwas. Vielleicht mit falschen Pfaden, da der Dienst ein anderes Arbeitsverzeichnis hat als die "normal" ausgeführte Datei.

pollito Themenstarter:in
314 Beiträge seit 2010
vor einem Jahr

Die beiden Einträge bekomme ich, wenn ich den Dienst starten will:


Protokollname: System
Quelle:        Service Control Manager
Datum:         09.09.2022 10:35:40
Ereignis-ID:   7000
Aufgabenkategorie:Keine
Ebene:         Fehler
Schlüsselwörter:Klassisch
Benutzer:      Nicht zutreffend
Computer:      RKK-XPS.isential.local
Beschreibung:
Der Dienst "WooComMesserschmidt" wurde aufgrund folgenden Fehlers nicht gestartet: 
Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.


Protokollname: System
Quelle:        Service Control Manager
Datum:         09.09.2022 10:35:40
Ereignis-ID:   7009
Aufgabenkategorie:Keine
Ebene:         Fehler
Schlüsselwörter:Klassisch
Benutzer:      Nicht zutreffend
Computer:      RKK-XPS.isential.local
Beschreibung:
Das Zeitlimit (1572864 ms) wurde beim Verbindungsversuch mit dem Dienst WooComMesserschmidt erreicht.

Danke und lG

René

René

16.842 Beiträge seit 2008
vor einem Jahr

Der Eintrag

Das Zeitlimit (1572864 ms) wurde beim Verbindungsversuch mit dem Dienst WooComMesserschmidt erreicht.

passt nicht zur Aussage

ist die Tatsache, dass der Fehler ziemlich schnell Auftritt – keine 30, sondern maximal zwei Sekunden.

1572864 sind über 20 Minuten.

Geh strukturiert an die Sache ran:
Deaktiviere einzelne Dinge Deines Applikationsstarts bzw. aktivier nach und nach einzelne Dinge und schau, ab wann es läuft.

pollito Themenstarter:in
314 Beiträge seit 2010
vor einem Jahr

In meiner Verzweiflung habe ich den Wert in der Registry "stark" erhöht:

Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control
ServicesPipeTimeout (REG_DWORD): 0x180000

Danke nochmals. Ich werde jetzt systematisch schrittweise vorgehen.

René

pollito Themenstarter:in
314 Beiträge seit 2010
vor einem Jahr
[Gelöst] Fehler 1053: Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung

OK, Problem gelöst. Ich habe mich von der Fehlermeldung in die Irre treiben lassen und an der falschen Stelle nach der Fehlerursache gesucht. Nun bin ich Schritt für Schritt systematisch vorgegangen und siehe da, ganz am Anfang schmiert der Dienst ab, ohne etwas zu machen. Der Fehler lag am "displayname" des Dienstes – dieser darf maximal 80 Zeichen lang sein, während ich 110 Zeichen verwendete. Das wusste ich nicht und die Fehlermeldung sagte auch was ganz anderes.

Lieben Dank für eure Hilfe! Das Wochenende ist gerettet!

LG

René

René

16.842 Beiträge seit 2008
vor einem Jahr

und die Fehlermeldung sagte auch was ganz anderes.

Eigentlich nicht. Man muss nur nachlesen, wie Services funktionieren.

Windows kann einen erfolgreichen Start des Services prinzipiell daran erkennen, ob er reagiert.
Reagiert der Service nicht nach einem Timeout, gibt es entsprechende Fehlermeldung.

Dass er nicht reagiert ist eben a) man ballert zu viel in den Start oder b) eine Exception lässt die Anwendung abbrechen -> Prozess abgebrochen = reagiert nicht.
Daher war die entsprechende Eingrenzung durch strukturelles Vorgehen auch der Lösungsweg.