none
ASP.NET Core - Automatische Updatelösung [Plattformunabhängig] RRS feed

  • Frage

  • Hallo zusammen,

    ich bin relativ neu in .NET Core und schreibe gerade meine erste REST-API (Web-API) mit ASP.NET Core 3.1. Leider stehe Ich gerade vor einem Problem an dem Ich schon länger am grübeln bin und keine 100%e saubere Lösung zum umsetzen finde. 

    Folgende Situation:

    Ich habe eine ASP.NET Core 3.1 Rest-API entwickelt, welche 24/7 laufen soll. Diese Rest-API läuft dabei auf verschiedenen Systemen mit Windows oder Linux basierendem Betriebssystem. Nun soll eine automatische Updatelösung integriert werden (ohne grafische Oberfläche). 

    Jetzt habe Ich schon einige allgemeine Möglichkeiten gefunden eine Art Update System umzusetzen.

    1.) Eine wäre beispielsweise der OneClick installer, welche jedes mal die aktuellste Version im Falle eines verfügbaren Updates schreibt. Diese würde aber schon wegfallen, da nur Windows dabei unterstützt wird. 

    2.) Des Weiteren habe Ich noch eine Möglichkeit gesehen, die DLL Dateien zur Laufzeit ersetzen zu können. Die Anwendung würde sich dann im Hintergrund automatisch mit den neuen Komponenten aktualisieren. Soweit Ich das aber verstanden habe, geht dies auch nur in Kombination eines IIS-Webserver auf einem Windows System.

    3.) Ich lade mir zur Laufzeit die neue Version herunter (falls Verfügbar). Sobald der Download abgeschlossen ist, schließe Ich meine aktuelle Instanz und starte die aktuellste Version. Wenn keine Fehler auftreten, lösche Ich alle Versionen bis auf die aktuelle (neueste). 

    Die Fragen die Ich mir dazu stelle sind:

    • Nach meiner Erkenntnis wäre die 3.) Variante die beste für eine Plattformunabhängige Umsetzung. Oder gibt es da noch einen anderen Weg dies besser machen zu können?
    • Wenn Ich die Anwendung für ein Update beenden möchte, wie gehe Ich da am besten vor? Ich habe im praktischen Fall verschiedene Benutzer, die auf die Controller der ASP.NET Core 3.1 Anwendung zugreifen und mehrere Threads im Hintergrund laufen. Wie kann Ich diese Ordnungsgemäß beenden/Herunterfahren ohne die Anwendung einfach zu terminieren? Datenverlust und Inkonsistenzen wären die Folge von unfertigen Aufgaben die angefangen und mittendrin abgebrochen wurden.

    Ich hoffe Ihr könnt mir weiterhelfen bzw. ein paar Tipps zu dieser Problemstellung geben. Vielen Dank schon mal im Voraus! 

    Freundliche Grüße

    6d 61 72 69 6f 

    Donnerstag, 12. Dezember 2019 20:04

Alle Antworten

  • Hallo,

    ich persönlich würde eine Webanwendung niemals automatisch Updaten sondern es dem Admin überlassen ob und wann geupdatet wird. Bei sicherheitsrelevanten Updates würde ich dem Admin dringend empfehlen das Update durchzuführen.

    Alle Threads die man in ASP.NET Core selbst startet sollte man eine CancellationTokenSource  mitgeben und ein beenden damit anfordern oder einen anderen Mechanismus zum selbständigen beenden nutzen. Damit ist dann auch immer gewährleistet das alle Aufgaben erledig und alle Ressourcen freigeben werden. Dies kann z.B. im einem der Trigger des IHostApplicationLifetime passieren. Mit Aufruf von StopApplication() würde man diesen Prozess starten. Die App wird aber erst beendet wenn alle Aufgaben erledigt sind.


    Gruß Thomas
    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: UWP Segoe MDL2 Assets, UI Strings

    Freitag, 13. Dezember 2019 11:27