2011-02-03 14 views
5

Szukam inteligentnych pomysłów, w jaki sposób szybko znaleźć wszystkie wykorzystanie stanu sesji w istniejącej aplikacji asp.net (MVC).Znaleźć wszystkie wykorzystanie stanu sesji

Wniosek ten był przedmiotem outsourcingu rozwoju i działał dobrze w produkcji. Ale niedawno zdaliśmy sobie sprawę, że używa on stanu sesji InProc zamiast (naszej preferowanej trasy) StateServer.

W teście na małą skalę przełączyliśmy ją na StateServer i wszystko działało dobrze. Jednak po wdrożeniu do produkcji nagle doświadczyliśmy dużej liczby błędów. Nie jestem pewien, czy te błędy były spowodowane przez tę zmianę (w rzeczywistości narzekały na problemy z poziomem bazy danych), ale usunięcie tej zmiany pozwoliło aplikacji ponownie działać (prawdopodobnie dlatego, że spowodowało ponowne uruchomienie).

Zanim spróbuję ponownie włączyć, chciałbym przeprowadzić dokładny audyt wszystkich obiektów umieszczonych w sesji (wcześniej wcześniej spojrzałem na kilka kontrolerów i wydawało się, że wszystko w porządku). Gdybym miał pełną kontrolę nad kodem, to jest to miejsce, w którym chciałbym tylko skomentować klasę (aby skompilować i znaleźć różne sposoby dotarcia do klasy sesji), a następnie skomentować akcesorów, kompilować i odwiedzić każdy błąd. Ale nie mogę tego zrobić z wbudowanymi typami frameworków .NET.

Jakiekolwiek inteligentne pomysły, jak znaleźć każde użycie?


Postanowiłem spróbować użyć Reflektora. Mam przeanalizował „użytkownik” dla każdej z następujących grup:

System.Web.HttpSessionStateBase.set_Item(String, Object) : Void 
System.Web.SessionState.HttpSessionState.set_Item(String, Object) : Void 
System.Web.SessionState.HttpSessionState.set_Item(Int32, Object) : Void 
System.Web.HttpSessionStateBase.set_Item(Int32, Object) : Void 
System.Web.HttpSessionStateBase.Add(String, Object) : Void 
System.Web.SessionState.HttpSessionState.Add(String, Object) : Void 

(i sprawdzeniu, że nie używamy TempData gdziekolwiek). Czy brakuje mi innych tras, na których przedmioty mogą znaleźć się w Sesji?

+1

można zrobić własną dostawcy sessionState która otacza dostawcy InProc, ale rejestruje każdą rozmowę do dodawania, usuwania i dostać http://msdn.microsoft.com/en-us/library/ms178587.aspx . W ten sposób możesz użyć stosu połączeń do śledzenia każdego użycia sesji w kodzie. –

Odpowiedz

0

Mówię, że szukam szerokiego rozwiązania dla "sesji". Poza tym, jeśli jest to aplikacja ASP.Net MVC, to nie zapominaj, że TempData jest także sesją.

+0

Dostaję za to dużo fałszywych trafień - jest dużo pracy z nHibernate, który również mówi o sesji. –

+0

Aaah! nHibernate session. Czy jest jakaś możliwość, że warstwa, która pracuje z sesją nhibernate, nie próbuje korzystać z sesji sieciowej (na tyle izolowana, aby można było tylko operować danymi).Jeśli tak, możesz ograniczyć swoje wyszukiwanie do samego projektu internetowego. – Pradeep

2

Możesz pobrać źródło dla asp.net MVC. szukać wykorzystaniem sesji

http://aspnet.codeplex.com/releases/view/58781 dla MVC 3 http://aspnet.codeplex.com/releases/view/41742 dla MVC 2 http://aspnet.codeplex.com/releases/view/24471 dla MVC 1

Ja rzeczywiście uważam że całkiem przydatne do układania wokół gdy trzeba dowiedzieć się, dlaczego coś jest robić to, co robi.

MVC 2 nie będzie działać z wyłączoną sesją, więc może używać sesji w sposób niezgodny z serwerem stanowym.

Z błędów DB, brzmi jak nHibernate może coś zrobić. Możesz dostać źródło tego również, aby zobaczyć, ale jestem pewien, że korzystanie z sesji zostanie udokumentowane.

Simon

Powiązane problemy