Wie funktioniert ASP.NET Griff Installationen
-
18-09-2019 - |
Frage
ich war nur in der Lage zu lesen, dass ASP.NET Änderungen an bestimmten Dateien wie aspx-Dateien, DLLs und andere erkennt. Es wird mich neu zu starten, laufende Anfragen und neue Anforderungen mit den neuen Dateien zum Einsatz beenden.
Aber was in der Zeit von der ersten Datei geschieht beeing kopiert, bis die letzten ausgetauscht wurde? Wenn ich die erste DLL-Datei austauschen, dann kommt eine Anfrage in, aber die anderen DLL-Dateien sind in einer älteren Version - wird es nur zum Absturz? Wird asp.net für einige Sekunden warten und erst dann beginnt, sich neu nach X Sekunden keine (relevanten) Änderungen Datei?
Thx!
Lösung
Sie haben 4 Fragen hier: Was in der Zeit von der ersten Datei geschieht bis zum letzten kopiert beeing ausgetauscht wurde - Es gibt eine festgelegte Zeit während .net, ob andere Dateien geändert wurden, um zu sehen wartet, bevor er startet die neue App-Domain mit der neuen dLL geladen.
Wenn ich die erste DLL-Datei austauschen, dann kommt eine Anfrage in, aber die anderen DLL-Dateien in einer älteren Version sind - wird es zum Absturz nur - Es hängt davon ab, welche Code-Änderungen sind in dem DLL . Wenn die neue dll fein mit altem Code ausführen kann, dann wird es in Ordnung sein. Aber wenn die Anwendungsdomäne die neue DLL dreht und dass neue dll ist abhängig von etwas, das noch nicht da ist ... ja dann wird es eine Ausnahme werfen.
ASP.NET für einige Sekunden warten und erst dann beginnt, sich neu nach X Sekunden keine (relevanten) Dateiänderungen -? Ja. Ich habe nicht in der Lage gewesen zu finden, wie lange diese Zeit ist. Aber in meiner persönlichen Erfahrung, es ist irgendwo in dem 1-2-Sekunden-Bereich.
Ich fand auch eine gute Erklärung hier auf Anwendungsdomäne und Nachladen von DLL: http://odetocode.com/Articles/305.aspx
Wenn Sie kopieren eine aktualisierte DLL in eine Anwendung Unterverzeichnis ist, die ASP.NET-Laufzeit erkennt es neuer Code auszuführen. da ASP.NET kann nicht die DLL in den bestehenden Swap AppDomain, es beginnt eine neue AppDomain. Die alte Anwendungsdomäne ist „drain „Gestoppt, das heißt, bestehende Anfragen fertig sind erlaubt die Ausführung und sobald sie alle fertig sind die AppDomain kann entladen. Das neue AppDomain beginnt mit dem neuen Code und beginnt alle neuen Anfragen nehmen.
Normalerweise, wenn eine DLL lädt in eine Prozess, der Prozess sperrt die DLL und Sie können die Datei nicht auf der Festplatte zu überschreiben. Allerdings haben AppDomains ein Feature als Schattenkopie bekannt, die erlaubt Baugruppen zu bleiben entriegelt und ersetzbar auf dem Datenträger.
Die Laufzeit initialisiert ASP.NET mit Schattenkopie aktiviert für den Behälter Verzeichnis. Die AppDomain kopiert jede dll es aus dem bin-Verzeichnis muss eine temporäre Speicherstelle vor dem Verriegeln und Laden der DLL in den Speicher. Schattenkopie ermöglicht es uns, jede zu überschreiben DLL in dem Verzeichnis ist während einer Update ohne das Web unter Anwendung offline.