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:
- Nasza konfiguracja to 2 x WebServers z równoważeniem obciążenia + baza danych stanu pojedynczej sesji.
- 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.
- 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).
- 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:
- Pulpit zdalny na serwerze LIVE1, otwórz IIS Mgr, kliknij problematyczną witrynę i wybierz Ustawienia zaawansowane na pasku bocznym.
- Zmień identyfikator na unikalny, np. 10. Kliknij OK.
- 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\W3SVC10
na 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.