2016-04-22 68 views
9

Od jakiegoś czasu mamy problemy z zapisywaniem danych w naszej bazie danych SQL.Sesja jest uszkodzona przy użyciu usługi aspnet_state

Czasami zapisy są zapisywane z danymi, które nie pasują do reszty wiersza, dzięki czemu wydaje się, że w pewnym momencie dane są "zamieniane" na coś innego, być może dane innego użytkownika, przed przekazaniem do bazy danych .

Używamy TransactionScopes przez cały poziom izolacji ReadCommitted, który sprawia, że ​​myślę, że kwestia integralności danych leży w aplikacji, a nie na poziomie bazy danych.

Skorzystamy z tej sesji intensywnie i zaczynamy myśleć, że czasy zepsutych danych są podobne do czasów, w których wdrażamy aktualizacje do systemu w ciągu dnia.

Używamy usługi aspnet_state do utrzymywania sesji po ponownym uruchomieniu aplikacji.

Nasi użytkownicy polegają na sesjach terminalowych, dlatego wielu użytkowników loguje się na tym samym serwerze i uruchamia system za pośrednictwem przeglądarki.

W przeszłości zauważyliśmy, że użytkownicy logują się przy użyciu tych samych danych logowania do domeny, ale jesteśmy teraz względnie pewni, że użytkownicy logują się teraz na unikatowych kontach.

99,9% danych jest poprawnych, ale staraliśmy się zrozumieć, co może być przyczyną tego sporadycznego problemu z integralnością danych.

Obecnie ograniczamy nasze rozmieszczenie do godzin pracy poza godzinami pracy pod kątem śmierci, ale nie zawsze jest to możliwe.

Czy ktoś może rzucić światło na to, dlaczego/jak to się dzieje?

EDIT: Mamy teraz to pojedyncze warstwy DAL patrz SQL query returns incorrect value in multi user environment

Odpowiedz

2

I zostały niedawno walcząc to !, i miał podobny problem do twojego około 95% danych pisanych z powrotem była prawidłowa. Rozważałem różne przyczyny, dla których głównym winowajcą było to, że niektórzy użytkownicy w sieci pobrali Chrome i otworzyli rekord w Chrome, zrywając identyfikator sesji, gdy Chrome ignoruje sesje.

Inną przyczyną było to, że użytkownicy nie zamknęli przeglądarki ani nie wylogowali się z aplikacji, umożliwiając temu samemu użytkownikowi lub zupełnie innemu użytkownikowi wybieranie i używanie identyfikatora sesji.

Po wprowadzeniu sprawdzenia przeglądarki, a następnie odrzuceniu Chrome, przeszkoleniu użytkowników, aby się wylogować, robieniu jakichkolwiek aktualizacji poza zajętymi okresami, problem właśnie minął.

Zapomniałem wspomnieć, również na IIS najlepiej wyłączyć buforowanie w buforowaniu wyjściowym, dla użytkownika i zestawu kernal, aby zapobiec buforowaniu.

Powiązane problemy