Es liegt ein Problem mit einer ASP.NET-Website vor, bei der sich die Sitzungen der Benutzer merkwürdig verhalten - Sitzungsdaten werden angezeigt, verschwinden und werden erneut angezeigt.
Ich denke ich weiß was das Problem ist:
- Unser Setup ist 2 x Load Balanced WebServer + Single Session State Database.
- Der Sitzungsstatus von ASP.NET SQL scheint von der Instanz-ID der IIS-Website (Metabase-ID) abhängig zu sein, um die Cookie-ID für eingehende Sitzungen eindeutig zu identifizieren und Werte abzurufen / zu speichern.
- Die IIS-Website-Instanz-ID der Website ist auf jedem Live-Server unterschiedlich (ID / W3SVC / 1 / Root auf WebServer A, ID / W3SVC / 2 / Root auf Webserver B).
- Der Lastenausgleich verwendet keine Clientaffinität, sodass jede Benutzer-HTTP-Anforderung an einen der beiden Server gesendet werden kann.
Wenn sich ein Benutzer bei der Site anmeldet und sich fortbewegt, kann jeder HTTP-Aufruf zu einem der beiden Webserver gehen und daher einen Sitzungsstatusdatensatz mit unterschiedlichen IDs verwenden, je nach Server. In der Tat würde der Benutzer gleichzeitig 2 separate Sitzungsinstanzen haben. Ich glaube , ich überprüft habe dies wie in der Datenbank ASPStateTempSessions Tabelle, jede ID Session - Cookie scheint entsprechen zwei fast identischen Namen Aufzeichnungen (ihre IDs nur von den letzten Zeichen unterscheiden, die ich glaube , sind ein Modifikator auf der Basis AppID aus der AspStateTempApplications- Tabelle) innerhalb von Sekunden erstellt.
Daher verhält sich der Sitzungsstatus anscheinend nicht ordnungsgemäß, da Änderungen, die an einem Sitzungsdatensatz vorgenommen wurden, nur für diesen Webserver bestehen bleiben. Wenn der Benutzer auf einen anderen Server mit Lastenausgleich wechselt, scheinen die Sitzungswerte zu verschwinden oder werden zurückgesetzt.
Ich glaube, dass die Lösung darin besteht, die IIS-Instanz-IDs der Sites zu synchronisieren (z. B. beides / W3SVC / 1 / Root ), aber ich habe versucht, diesen Wert in IIS unter Erweiterte Einstellungen zu bearbeiten Die Site gibt 404s auf diesem Server zurück, bis ich sie wieder geändert habe.
Ich habe ein VBS-Skript für dieses Problem gefunden, aber es scheint nur für IIS 6 zu sein, daher mache ich mir Sorgen, es zu versuchen. Hat jemand anderes diese Situation auf IIS 7.5 angetroffen und wie haben Sie sie behoben?
BEARBEITEN / LÖSUNG
Mein Fehler war, dass ich vergessen habe, IIS neu zu starten, nachdem ich die Site Instance ID in IIS geändert habe. Danach wurde die ID aktualisiert und die ASP.NET-Sitzungen auf den beiden Webservern synchronisiert.
Vollständige Anweisungen:
- Remote Desktop auf Server LIVE1, öffnen Sie IIS Mgr, klicken Sie auf die problematische Site und wählen Sie in der Seitenleiste Erweiterte Einstellungen .
- Ändern Sie die ID in einen eindeutigen Wert, z. B. 10. Klicken Sie auf OK.
- Starten Sie den Webdienst neu (
c:\windows\system32\iisreset /restart
)
Machen Sie dasselbe für LIVE2 (stellen Sie sicher, dass die Site-ID mit der auf LIVE1 übereinstimmt)
Beachten Sie, dass sich die Site-ID auf den Speicherort der Site-Dateien auswirkt, z. B. würde ein Protokolldateiordner erstellt C:\inetpub\logs\LogFiles\W3SVC10
.
Beachten Sie auch , dass Sie diese Änderungen manuell durch Bearbeiten der Website tun könnten id - Attribut in der auf jedem Server - Konfigurationsdatei IIS: C:\Windows\System32\inetsrv\config\applicationHost.config
. Benötigt Administratorrechte und muss anschließend noch zurückgesetzt werden.
quelle