2 Stimmen

Können ASP.NET 3.5-Webanwendungsprojekte "während der Ausführung" erweitert oder gepatcht werden?

Beim Aufbau eines ASP.NET 3.5 WAP, bin ich immer frustriert von dem Gefühl, dass egal wie ich "isolieren" oder "kapseln" Bits der Logik oder UI ich bin immer noch die ganze Website jedes Mal, wenn ich eine einzige Zeile Code aktualisieren müssen zum Absturz bringen. Vielleicht verstehe ich nicht, wie ASP.NET mit Änderungen im "bin"-Verzeichnis umgeht, aber angesichts der vielen "Warum entlädt sich meine AppDomain?"-Meldungen in den verschiedenen Gruppen scheint dies immer noch etwas zu sein, das man vermeiden sollte.

Hat jemand eine Anleitung und/oder Frameworks, um eine ASP.NET 3.5 WAP wirklich zu modularisieren, so dass Logik und Seiten "im Flug" hinzugefügt/aktualisiert werden können? Ich googelte System.AddIn ein bisschen, aber es scheint auf WPF-Anwendungen konzentriert werden.

Vielen Dank für Ihre Hilfe!

James White

1voto

Cristian Libardo Punkte 9235

Dies ist wirklich schwer zu erreichen, da .NET das Entladen eines Typs, der in die Anwendungsdomäne geladen wurde, nicht unterstützt.

Eine Möglichkeit, dies zu tun, besteht darin, mit Anwendungsdomänen zu spielen oder WCF für sich arbeiten zu lassen.

Eine weitere Möglichkeit wäre die Implementierung von ayende's hod code swapping .

Eine dritte Möglichkeit wäre, die Logik in den dynamisch kompilierten Teil (das ASPX) zu integrieren. Allerdings wird die Anwendung nach einer konfigurierbaren Anzahl von Änderungen neu gestartet.

1voto

Jon Skeet Punkte 1325502

Verwenden Sie zwei oder mehr Server. Wenn Sie ein Upgrade benötigen, schalten Sie einen aus, aktualisieren ihn, bringen ihn hoch, schalten den anderen aus, aktualisieren ihn, bringen ihn hoch.

Es ist etwas mühsam, beide Versionen gleichzeitig laufen zu lassen, da Datenbankänderungen usw. schwierig sein können. Aber derselbe Aufwand zahlt sich auch aus, wenn man Änderungen wieder rückgängig machen kann, vielleicht nur ein paar Benutzer auf einem "experimentellen" Server hosten kann usw. Ganz zu schweigen von der horizontalen Skalierung, die generell eine gute Sache ist :)

1voto

FlySwat Punkte 165766

Sie können hier einen anderen Ansatz wählen, nämlich dafür zu sorgen, dass ein AppDomain-Neustart die Nutzbarkeit der Website nicht beeinträchtigt.

Verschieben Sie dazu die Sitzung aus dem Prozess heraus, oder hören Sie ganz auf, sich auf die Sitzung zu verlassen.

Wenn Sie dies tun, ist ein Neustart der Appdomain keine große Sache, und Sie bereiten Ihre Anwendung auf eine einfachere Skalierbarkeit über Cluster hinweg vor, falls Sie jemals an diesen Punkt kommen.

0voto

James White Punkte 2022

Nur ein zusätzlicher Gedanke, aber ich wette, das war es, was das ganze "COM+" Bit erlaubte (außer für gemeinsam genutzte Hosts). Die Aufteilung der Logik in kleine zustandslose Wurstfabriken ermöglichte wahrscheinlich einen reibungslosen Fix-in-Flight-Betrieb.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X