Hallo,
wir stehen hin und wieder vor dem Problem, dass wir unsere Asp.Net Anwendung aktualisieren müssen, während Anwender damit arbeiten. Prinzipiell kein Problem, die Dateneingaben halten sich in Grenzen. Nur möchten wir die Anwender gern darüber informieren, dass wir ein Update hochladen. Momentan kann es passieren, dass einfach Exceptions kommen, weil der User in seiner Session auf Objekte zugreifen will, die in der alten Anwendung existieren...
Kurzum: Wie kann ich die Webseite am besten dicht machen, während ich einen Upload mache, am besten noch während ich teste, obs auch geht. Idealerweise müsste der User zumindest eine sinnige Meldung sehen.
Schöne Grüße,
Mario
Ich würde kurzerhand eine neue Index Seite mit dem Hinweis hochladen.
Das hilft leider nur bedingt. Die meisten User arbeiten nicht auf der Index-Seite, sondern sind auf irgendeiner untergeordneten Seite.
Schöne Grüße,
Mario
OK. Verstehe. Werde wahrscheinlich das Problem auch bald haben 🙂
Dann sollte man wahrscheinlich in die Anwendung eine Art Update-Mechanismus einbauen.
Das bedeutet dass du im Admin-Bereich entsprechend auf Update klickst. Nun wird auf jeder Seite ein bool Wert abgefragt. Wenn dieser auf 1 steht, wird der Benutzer weitergeleitet zu einer anderen Seite mit entsprechenden Kommentaren.
Und nun kannst du nach einer gewissen Zeit deine entsprechenden Updates einspielen. Die Index Seite musst du dann natürlich auch erstellen.
Problem ist aber dass bei einem PostBack nicht immer die Seite neu aufgerufen wurde sondern es werden ja wahrscheinlich auch Daten gespeichert, usw.
Also ist diese Lösung auch nicht die Beste. 😦
Diese händische Lösung ist eigentlich genau das, wass ich vermeiden wollte 😉 Aber ich habe den Verdacht, dass dazu einfach kein Mechanismus vorhanden ist, weßhalb ich nicht drum rum komme 🙁
Trotzdem danke für die Bestätigung. Ich denke, dass ich einfach zu Beginn eines Uploads eine Datei hochlade. Die kann dann ein Universalcode auch Existenz abfragen, die Session verwerfen und zu einer Default-Seite weiterleiten. Ich muss direkt mal schauen, ob dass nicht in der global.asax oder so geht, dann bräuchte ich es nicht für jede Seite coden...
Schöne Grüße,
Mario
OK. Wenn du bescheid weißt wie du es anstellt, wäre ich dir dankbar es kurz zu Schildern.
Vielen Dank im Voraus.
Also, ich habe es jetzt an einer globalen Stelle (global.asax - BeginRequest) gemacht:
if &File.Exists(AppPath + 'bin\update.update') and
(not Request.Url.ToString.EndsWith('WarnUpdate.htm'))
then begin
Response.Redirect('WarnUpdate.htm', True);
end;
Wenn im Bin-Verzeichnis eine Datei gefunden wird, wird automatisch auf die WarnUpdate.htm weitergeleitet. Wichtig ist nur, die aktuelle URL zu prüfen, um sich nicht im Kreis zu schicken 😉 Dann will ich mal hoffen, ob das so tut, lokal im Cassini funktioniert es, aber der IIS im Echtbetrieb ist da ja schon anders. Ich könnte auf die Nase fallen, wenn er unbedingt eine laufende Webanwendung will (genau die gibt es ja nicht). Dann muss ich vielleicht noch auf ein anderes Verzeichnis umleiten. Naja, mal schauen, aber der Weg gefällt mir, weil nur an einer Stelle 🙂
Schöne Grüße,
Mario
So, ein bischen Test hier und ein bischen Test da, und siehe da, es war ein Schuß in den Ofen 🙁
Während in den Upload meiner DLL durchführe, ist die Web-App nicht zu gebrauchen. Vom Prinzip her könnte ich nur meine Sperrung setzen, hoffen dass alle User auf der Sperrseite sind, den Upload beginnen und beten das keiner auf die Idee kommt, es in der Zeit nochmal zu versuchen. Dann will der IIS loslegen, obwohl die DLL noch gar nicht voll da ist und das geht natürlich nicht. Von daher, war die Arbeit eigentlich umsonst und im Moment kann ich es nur so lassen und hoffen, dass ich nur selten Updates fahren muss.
Ich könnte nur noch die Webseite im IIS runter nehmen, aber dann sind alle Anwendungen darauf tot 🤔
Falls jemand noch gute Vorschläge hat: Immer her mit X( Es muss doch noch mehr Leute geben, die das Problem haben?
Schöne Grüße,
Mario
Warum setzt du nicht in der Web.Config den Authentifikations Mode auf Forms?
ungefähr so:
[php]<authentication mode="Forms">
<forms loginUrl="index.aspx" />
</authentication> [/php]
Somit können die Users keine Unterseiten öffnen und werden immer wieder auf die index Seite verwiesen.
Ich hoffe, dass ist das was du meinst.
Warum umständlich, wenn es auch einfach geht 😉.
Man schalte im IIS die Hostheader von einer auf die andere Webseite um, nehme die alte (zu aktualisierende Seite) offline, überarbeite sie, schalte sie wieder online, und setze die Hostheader zurück.
Programmatischer Aufwand = 0.
Viele Grüße,
der Eisbär
Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden
Die HostHeader würden dann aber alles umleiten, was auf der Domain liegt? Könntest Du ein kurzes Beispiel geben, wie soetwas aussehen könnte. Bei uns steht bei den Hostheader-Werten als IP immer nur Standard, weil unser Webserver auch nur eine IP hat. Funktioniert dass dann überhaupt?
Schöne Grüße,
Mario
In ASP.NET 2.0, while you're in the process of updating your site, you can expose a friendly error page by including a file called app_offline.htm in your site's root. If this file exists, all requests to the site will be redirected to this page. The only way to get around this is to delete the file. You can read more about this feature here.
While the App_offline.htm file exists, any request to the Web site will redirect to the file.
Remember to remove the App_offline.htm file after you are finished copying files.
Das mit AppOffline freut mich zu hören. Schade dass es erst in 2.0 enthalten ist, darauf können wir im Moment nicht umstellen, da es Delphi einfach nicht hergibt.
Die Lösung mit den Hostheadern klingt darum im Moment am spannendsten, die web.config werde ich aber auch mal versuchen.
Schöne Grüße,
Mario