Frage

Ich habe eine Website in C # / ASP.NET, die derzeit in der Entwicklung befindet. Wenn wir in der Produktion sind, würde ich Releases wie oft des Tages über den Kurs zu tun, wie wir Bugs und Features hinzufügen zu beheben (wie folgt aus: http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the -wordpress-com-Geschichte / ).

Wenn Sie eine neue Version der Website hochladen oder auch nur eine einzige Datei ändern, schlägt es die Benutzer aus, die in der aktuell angemeldet sind und macht sie jegliche Form von vorn beginnen und so. Gibt es ein Geheimnis zu der Möglichkeit, Implementierungen zu tun, ohne mit den Nutzern für .NET-Sites zu stören?

War es hilfreich?

Lösung

Wenn Sie eine Änderung an eine Konfigurationsdatei machen, den Inhalt eines Binärordner der App, oder solche Dinge, die ASP.NET-Arbeitsprozess neu gestartet werden zusammen mit der Anwendung.

Dies führt zu gelöschten Sitzungen und getreten-out-Nutzer.

Die Lösung ist andere Sitzungsspeichermethoden andere als der Standard InProc zu verwenden.
Sie können dies erreichen, indem Sie den Sitzungsstatusmodus . Die SqlServer und StateServer Optionen bieten eine sehr gute Lösung für Ihr Problem.

SqlServer Modus ist relativ einfach einzurichten und aufstehen und laufen. (Im Grunde ist es die Schaffung nur eine Datenbank, laufen aspnet_regsql, und dann ist es an der Config angeben.) Wenn Sie MS SQL Server nicht oder nicht wollen, es zu benutzen, können Sie StateServer oder eigene Anbieter erstellen und verwenden Sie den Custom-Modus.

Die einzige Einschränkung ist, dass Sie nur serializable Werte mit SqlServer und StateServer Modus speichern können.

Andere Tipps

Der Grund, warum Sie dies hier zu sehen ist, weil Sie den Anwendungspool zurücksetzen, damit jeder das Zurücksetzen der Sitzung.

Die sauberste Weg wäre, um Ihre Sitzung zu einem Sitzungsstatus Server auszulagern, oder zu minimieren, um Ihre Nutzung der Sitzung.

Eine Möglichkeit, dies zu umgehen ist, wenn man nicht auslagern kann Ihre Sitzung ist auf ein neues virtuelles Verzeichnis immer bereitstellen. Ihre öffentlich zugängliche URL leitet dann nur auf Ihre neueste Version verfügbar. Alle Benutzer, die bereits angemeldet sind weiterhin die ältere Version verwenden, aber alle neuen Benutzer die neue Version verwenden würde.

Es gibt zwei Alternativen, dies zu erreichen:

  1. Do Session nicht verwenden. (Sie Cookies für die Authentifizierung verwenden)
  2. Verwenden Sie eine andere Session-State-Modus. State-Server oder SQL Server. http://msdn.microsoft.com/en -US / library / ms178586 (v = VS.80) aspx

So oder so werden Sie auch die Flexibilität gewinnen können Ihre Anwendung auf mehreren Servern für die Leistung oder ausfallsichere Clustering ausgeführt werden.

Je nachdem, was Sie speichern im Objekt Session, können Sie in der Lage sein, es Session_Start Handler in Global.asax der zu rekonstruieren. Ich habe dies in einer internen Anwendung zu tun, wo wir wirklich nur die Identität des Benutzers in der Session gespeichert, so dass wir nur ihre Genehmigung Cookie verwenden könnten die Sitzung neu zu erstellen.

Eine Sache im Auge zu behalten, wenn Sie dies tun: sagen, einen Benutzer Last bis ein Formular und dann Blätter für das Mittagessen, und Sie die Seite aktualisieren, während sie weg sind. Wenn sie an ihren Schreibtisch zurückkehren und das Formular abzuschicken werden sie die alte Version des Formulars auf den neuen Code-behind vorlegen.

ich sind wohl Benutzer gekickt, weil Web-Server-Anwendung neu gestartet wird. Mit dem Standard-Benutzersitzungen im Speicher und Sitzungsdaten gespeichert werden, wird getötet. Session-Provider ist konfigurierbare Option in web.config. (Out-of-Web-Anwendung-Prozess) -Sitzung Anbieter kann extern wird die Wahl ist ein Schritt zu dem, was Sie erwarten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top