Gibt es eine Möglichkeit, eine DOTNET CORE Anwendung, die in DOCKER läuft, herunterzufahren? Wenn ja, welches Ereignis sollte ich hören?
Alles, was ich will, ist eine Stornierungsanfrage. Ich möchte meine Stornierungs-Token an die aktuellen Methoden übergeben und die Abschaltung verschieben, während sie arbeiten.
Suchen Sie nach einem Beispielcode, Referenzlink usw., die für dotnet core und nicht für generische Informationen relevant sind
UPDATE Diese Frage ist kein Duplikat von Docker-Container wird sofort auch mit Console.ReadLine () in einer .net-Kernkonsolenanwendung beendet , weil ich kein sofortiges Beendigungsproblem habe. Ich muss etwas wie Windows.SystemsEvents.SessionEnding aufrufen sich auf
Console.CancelKeyPress
zu verlassen und / oderWebHostBuilder()
zu implementieren passt nicht zur Rechnung.
System.Console hat ein Ereignis namens CancelKeyPress. Ich glaube, das wird ausgelöst, wenn ein Signat-Ereignis in dotnet übergeben wird.
%Vor% In .NET Core 2.0 können Sie das AppDomain.CurrentDomain.ProcessExit
-Ereignis verwenden, das unter Linux in Docker funktioniert. AssemblyLoadContext.Default.Unloading
funktioniert wahrscheinlich auch vor .NET Core 2.0.
Mit 2.0.0-preview2-006497 habe ich einige Tests durchgeführt, und jetzt wird AssemblyLoadContext.Default.Unloading ausgelöst, wenn Docker ein SIGTERM / SIGINT an den Container sendet .
Beispielcode sieht folgendermaßen aus:
%Vor%Siehe auch dieses Thema für einige Details: Ссылка
Wenn Ihr Container unter Linux läuft, funktioniert Loader.AssemblyLoadContext.Default.Unloading
, da er das SIGTERM-Signal abfangen kann, Windows hat jedoch nicht den entsprechenden Mechanismus dafür ( Dotnet-Problem ). Hier finden Sie eine Antwort auf die Benachrichtigung zum Herunterfahren in Windows, indem Sie SetConsoleCtrlHandler
ursprünglich von gist