Problem mit dem ASP.NET-Sitzungsstatus des IIS 7.5-Webservers mit Lastenausgleich

14

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:

  1. Unser Setup ist 2 x Load Balanced WebServer + Single Session State Database.
  2. 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.
  3. 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).
  4. 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:

  1. Remote Desktop auf Server LIVE1, öffnen Sie IIS Mgr, klicken Sie auf die problematische Site und wählen Sie in der Seitenleiste Erweiterte Einstellungen .
  2. Ändern Sie die ID in einen eindeutigen Wert, z. B. 10. Klicken Sie auf OK.
  3. 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.

James McCormack
quelle

Antworten:

11

Ihrer Frage nach scheint es, dass Sie einen zentralen Sitzungsstatusserver (DB?) Haben, der die Sitzungsdaten verfolgt?

Sie müssen auch den Computerschlüssel synchronisieren, der für die Verschlüsselung verwendet wird, damit die Formularauthentifizierung usw. funktioniert. Dies könnte sich auch auf die Sitzungsidentifikation auswirken, da ich nicht sicher bin.

Konfigurieren von Computerschlüsseln in IIS 7

Darüber hinaus sollten Sie die gemeinsame Konfiguration zwischen den Computern verwenden, da dies möglicherweise das Problem mit verschiedenen Computerschlüsseln selbst behebt.

IIS-Konfigurationssynchronisierung für Webserverfarm?

BEARBEITEN: Haben Sie beim Ändern der Site-ID versucht, den IIS-Manager neu zu starten, um festzustellen, ob sich das Webroot geändert hat? Vielleicht ist die Konfiguration mit der ID verbunden, was bedeutet, dass eine Änderung der ID auch Dinge wie den Dokumentenstamm usw. Ändert

jishi
quelle
Danke für die Ideen Jishi aber ich hatte den machineKey schon in der web.configs synchronisiert. Ich denke, ich suche wirklich nach einer Möglichkeit, die IIS-Instanz-ID einer Site zu ändern, ohne die Sites auf den Webservern vollständig entfernen und neu konfigurieren zu müssen.
James McCormack
Haben Sie beim Ändern der Site-ID versucht, den IIS-Manager neu zu starten, um festzustellen, ob sich das Webroot geändert hat? Vielleicht ist die Konfiguration mit der ID verbunden, was bedeutet, dass eine Änderung der ID auch Dinge wie den Dokumentenstamm usw. ändert
jishi
1
Ja, das war es! Ich habe vergessen, den IIS-Dienst neu zu starten (Befehlszeile iisreset / restart). Hat danach gut funktioniert! Bitte aktualisiere deine Antwort mit diesen Informationen und ich gebe dir die akzeptierte Antwort.
James McCormack
Beschlossene Sache. Ich bin froh, dass es für dich geklappt hat.
Jishi