Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] - Wie kann ich eine abgestürzten Dienst automatisch neu starten?
jaipur
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

[gelöst] - Wie kann ich eine abgestürzten Dienst automatisch neu starten?

beantworten | zitieren | melden

Hallo Community!

Ich habe da ein Programm welches als Windows-Dienst seine Dienste verrichtet, funktioniert auch so mehr oder weniger. Das Problem, der Dienst stürzt manchmal ab. Um dieses erst ein Mal in den Griff zu bekommen hatte ich mir überlegt aus dem Dienst ein gewöhnliches Programm zu machen und über einen neuen Dienst dann dieses Programm zyklisch aufzurufen. Wobei der Zyklus gerne mehrer Zyklen dauern darf, zeitkritisch ist das alles nicht.

Bei dem aktuellen Dienst handelt es sich um ein sehr großes Programm. 40 C#-Quellcode-Dateien (282KB), bei dem neuen Dienst würde es sich nur um ein sehr kleines Programm handelt, welcher nur den alten Dienst als Programm startet und am besten auch noch alles protokolliert.

Oder einfach alles so lassen und mit einem neuen Dienst den alten Dienst bei Bedarf neu starten?

Vielen Dank im Voraus
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von jaipur am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

So wie sich das anhört ist der Dienst schon das richtige Konzept.

Aber wenn ein Dienst abstürzt, dann hat das eine Ursache.
Wieso fixt Du die Ursache nicht?

40 C# Dateien mit 282 KB hört sich alles andere nach einem "großen Programm" an, aber da gibts natürlich unterschiedliche Ansichten.
private Nachricht | Beiträge des Benutzers
jaipur
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

beantworten | zitieren | melden

Hallo und vielen Dank für die schnelle Antwort!

40 C# Dateien mit 282 KB ist für mich schon ein größeres Programm ;)

Ich dachte immer ein Dienst macht nur gerade so viel wie notwendig und delegiert wenn möglich alles andere. Daher hatte ich die Idee dass es sinnvoller wäre ein Programm zyklisch aufzurufen, zu mal es doch auch einfacher ist ein gewöhnliches Programm besser zu handhaben als einen Dienst?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15702
Herkunft: BW

beantworten | zitieren | melden

Bitte doch keine Full Quotes. Bist doch lang genug dabei ;-)
[Hinweis] Wie poste ich richtig?
Zitat von jaipur
Ich dachte immer ein Dienst macht nur gerade so viel wie notwendig und delegiert wenn möglich alles andere.
Das kommt drauf an wie man einen Dienst sieht (als Microservice oder nicht). Aber das ist ein Pattern und keine Regel für eine Technologie.

Davon abgesehen ist das ja für den Sachverhalt irrelevant.
Der stürzt soll ab, was er nicht tun soll.
Daher fix die Ursache ;-)
Zitat von jaipur
Daher hatte ich die Idee dass es sinnvoller wäre ein Programm zyklisch aufzurufen, zu mal es doch auch einfacher ist ein gewöhnliches Programm besser zu handhaben als einen Dienst?
Das hat ja mit dem Thema wenig zutun.

Aber ein Dienst ist nicht schlechter oder besser zu Handhaben als eine Desktop-Anwendung.
Das kommt ja auf den Einsatzzweck (und Anforderungen) an.

Pauschal einfach Prozesse starten kann auch sehr große negative Nebenwirkungen haben.
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 511
Herkunft: Münster

beantworten | zitieren | melden

Zitat von jaipur
Ich dachte immer ein Dienst macht nur gerade so viel wie notwendig und delegiert wenn möglich alles andere. Daher hatte ich die Idee dass es sinnvoller wäre ein Programm zyklisch aufzurufen, zu mal es doch auch einfacher ist ein gewöhnliches Programm besser zu handhaben als einen Dienst?

Ich würde einen Dienst immer einer Anwendung die z. B. über die Aufgabenverwaltung gestartet wird vorziehen. Dienste werden in der Regel auch überwacht, so dass der Admin mitbekommt, dass ein wichtiger Dienst ausgefallen ist.

Ich fange in jedem Dienst die Unhandled Exceptions ab und schreibe diese wahlweise in eine Logdatei oder auch ins Ereignisprotokoll. So kriegt man eigentlich recht fix raus, woran es liegt. Ansonsten lassen sich Dienste ja auch debuggen um die Absturzursache zu ermitteln.
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7538
Herkunft: Waidring

beantworten | zitieren | melden

Hallo jaipur,
Zitat von hypersurf
Ereignisprotokoll
Hast du da einmal hineingeschaut? Bei unbehandelten Ausnahmen steht da oft eine wertvolle Info drin, mit der sich die Ursache rekonstruieren lässt.
Zitat
Dienst ein gewöhnliches Programm zu machen und über einen neuen Dienst dann dieses Programm zyklisch aufzurufen
Du weißt schon dass in der Dienstkonfiguration das Neustartverhalten eingestellt werden kann? Das würde ich vorziehen, denn so geschieht es mit Bord-Mitteln und nicht per selbst gebauten Analogon.

mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
jaipur
myCSharp.de - Member



Dabei seit:
Beiträge: 130

Themenstarter:

beantworten | zitieren | melden

Hallo und vielen Dank für die nützlichen Infos!

Ich werde den Dienst so belassen wie er ist und mich auf die Fehlersuche begeben, ich denke dies es der richtige Weg ist :)

Nochmals vielen Dank!
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3429
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,

ich programmiere einen Dienst generell immer so, dass die ganze Logik in einer eigenen Assembly (oder mehreren) liegt, und ich dann auch ein minimales Konsolenprogramm schreiben kann, welches diese Logik ausführt. Das ist bei Diensten auch immer möglich.
Das ist oft sehr hilfreich beim Debuggen und bei der Fehlersuche, und ich kann dieses Vorgehen aus Erfahrung wärmstens empfehlen.

Gruß, MarsStein
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers