Problem stanu sesji ASP.NET serwera WWW z równoważeniem obciążenia IIS 7.5


14

mamy problem ze stroną ASP.NET, w której sesje użytkowników zachowują się dziwnie - dane sesji pojawiają się, znikają i pojawiają się ponownie.

Myślę, że wiem na czym polega problem:

  1. Nasza konfiguracja to 2 x WebServers z równoważeniem obciążenia + baza danych stanu pojedynczej sesji.
  2. Pamięć stanu sesji SQL w programie ASP.NET wydaje się zależeć od identyfikatora instancji witryny IIS (identyfikator bazy danych) w celu jednoznacznej identyfikacji identyfikatora pliku cookie sesji przychodzącej i pobierania / przechowywania wartości.
  3. Identyfikator wystąpienia witryny IIS witryny internetowej jest inny na każdym z aktywnych serwerów (ID / W3SVC / 1 / Root na WebServer A, ID / W3SVC / 2 / Root na Webserver B).
  4. Równoważenie obciążenia nie korzysta z koligacji klienta, więc każde żądanie HTTP użytkownika może przejść do dowolnego serwera.

Dlatego, gdy użytkownik loguje się na stronie i przemieszcza się, każde wywołanie HTTP może przejść do dowolnego serwera WWW, a zatem użyć rekordu stanu sesji z różnymi identyfikatorami w zależności od serwera. W efekcie użytkownik miałby jednocześnie 2 osobne instancje sesji. Wydaje mi się, że zweryfikowałem to, ponieważ w tabeli ASPStateTempSessions bazy danych każdy identyfikator cookie sesji wydaje się odpowiadać 2 prawie identycznie nazwanym rekordom (ich identyfikatory różnią się tylko kilkoma ostatnimi znakami, które moim zdaniem są modyfikatorem opartym na AppID od Tabela AspStateTempApplications ) utworzona w ciągu kilku sekund od siebie.

W związku z tym stan sesji będzie wyglądał źle, ponieważ zmiany wprowadzone w jednym rekordzie sesji będą obowiązywać tylko na tym serwerze WWW. Jeśli użytkownik przejdzie na inny serwer z równoważeniem obciążenia, wartości sesji wydają się znikać lub przywracać.

Wierzę, że rozwiązaniem jest zsynchronizowanie identyfikatorów instancji usług IIS witryn (np. Uczynienie ich jednocześnie / W3SVC / 1 / Root ), ale próbowałem edytować tę wartość w usługach IIS w Ustawieniach zaawansowanych i chociaż zapisano ją OK, po prostu witryna zwraca 404s na tym serwerze, dopóki go nie zmienię.

I znalazłem skrypt VBS tego problemu, ale wydaje się być dla IIS 6 tylko tak się martwię próbować. Czy ktoś jeszcze spotkał się z tą sytuacją w IIS 7.5 i jak to naprawiłeś?


EDYCJA / ROZWIĄZANIE

Mój błąd polegał na tym, że zapomniałem ponownie uruchomić IIS po zmianie identyfikatora wystąpienia witryny w IIS. Następnie identyfikator został zaktualizowany, a sesje ASP.NET zostały zsynchronizowane na dwóch serwerach WWW.

Pełna instrukcja:

  1. Pulpit zdalny na serwerze LIVE1, otwórz IIS Mgr, kliknij problematyczną witrynę i wybierz Ustawienia zaawansowane na pasku bocznym.
  2. Zmień identyfikator na unikalny, np. 10. Kliknij OK.
  3. Uruchom ponownie usługę internetową ( c:\windows\system32\iisreset /restart)

Zrób to samo dla LIVE2 (upewnij się, że identyfikator witryny jest taki sam jak na LIVE1)

Należy pamiętać, że identyfikator witryny ma wpływ na lokalizację plików witryny, np. Folder plików dziennika stałby się C:\inetpub\logs\LogFiles\W3SVC10na przykład.

Należy również zauważyć, że można zrobić te zmiany ręcznie edytując stronę id atrybut w IIS plik konfiguracyjny na każdym serwerze: C:\Windows\System32\inetsrv\config\applicationHost.config. Wymaga uprawnień administratora i nadal wymaga zresetowania.

Odpowiedzi:


11

Sądząc po twoim pytaniu, wydaje się, że masz centralny serwer stanu sesji (DB?), Który śledzi dane sesji?

Musisz także zsynchronizować klucz komputera, który jest używany do szyfrowania, aby uwierzytelnianie formularzy itp. Działało. Może to również wpłynąć na identyfikację sesji, nie jestem pewien.

Konfigurowanie kluczy maszynowych w IIS 7

Ponadto powinieneś skorzystać ze współdzielonej konfiguracji między komputerami, może to samo rozwiązać problem z różnymi kluczami komputera.

Synchronizacja konfiguracji usług IIS dla farmy serwerów WWW?

EDYCJA: Czy po zmianie identyfikatora witryny próbowałeś ponownie uruchomić Menedżera IIS, aby sprawdzić, czy zmienił się katalog główny? Być może konfiguracja jest połączona z identyfikatorem, co oznacza, że ​​zmiana identyfikatora modyfikuje również takie rzeczy, jak katalog główny dokumentu itp


Dzięki za pomysły Jishi, ale zsynchronizowałem już klucz machineKey w pliku web.configs. Wydaje mi się, że naprawdę szukam sposobu na zmianę identyfikatora instancji witryny IIS bez konieczności całkowitego usuwania i ponownej konfiguracji witryn na serwerach WWW.
James McCormack,

Czy po zmianie identyfikatora witryny próbowałeś ponownie uruchomić Menedżera IIS, aby sprawdzić, czy zmienił się katalog główny? Być może konfiguracja jest powiązana z identyfikatorem, co oznacza, że ​​zmiana identyfikatora modyfikuje także takie rzeczy, jak katalog główny dokumentu itp.
jishi 11.1111

1
Tak, to było to! Zapomniałem zrestartować usługę IIS (wiersz poleceń iisreset / restart). Potem działało dobrze! Zaktualizuj swoją odpowiedź o te informacje, a dam ci odpowiedź zaakceptowaną.
James McCormack,

Skończona sprawa. Cieszę się, że ci się udało.
jishi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.