2012-09-04 28 views
6

Mam aplikację, która ma pewne działania kontrolera wywołujące wolne usługi stron trzecich. Te działania są wywoływane za pomocą wywołań AJAX ze strony.ASP.NET MVC: jak zapobiec blokadzie sesji?

Mogę używać kontrolerów async do uwolnienia puli wątków ASP.NET, to świetnie. Ale co z sesją? Jeśli korzystam z sesji InProc i prośba o "powolną akcję", dany użytkownik nie może złożyć żadnego wniosku do aplikacji, ponieważ jego sesja jest blokowana przez pierwsze "wolne" połączenie.

W PHP istnieje metoda session_write_close() które można używać w następujący sposób:

  1. Zebrane żądanie użytkownika do wolnoprzełączające
  2. Sprawdź praw użytkownika, aby uzyskać dostęp do kontrolera/działania na podstawie danych sesji
  3. Napisz coś do sesji w razie potrzeby
  4. Zadzwoń pod session_write_close(). Od tej sesji punkt jest zamknięty przez ten wniosek i wszelkie inne wniosek ten sam użytkownik może uzyskać dostęp
  5. Bądź moją powolną wezwanie (być może w pewnym asynchroniczny sposób)

wiem, że mogę wyłączyć stanu sesji na poziomie kontrolera przy użyciu atrybutu [SessionState], ale to nie jest rozwiązanie.

Wszelkie pomysły?

+0

Dlaczego sądzisz, że sesja jest „zablokowany” przez jakiekolwiek żądanie? –

+0

Oto szczegóły: http://stackoverflow.com/questions/3666556/a-nonlocking-in-process-asp-net-session-state-store, a tutaj kolejne moje pytanie na podobny temat: http: // stackoverflow.com/questions/2438493/the-whole-site-is-blocked-while-one-page-is-waiting-for-blocking-operation-php – artvolk

+0

Oto ostateczny opis: http://stackoverflow.com/ pytania/3629709/i-właśnie-odkryto-dlaczego-wszystkie-strony-asp-net-są-powolne-i-am-próbuje-pracować-out – artvolk

Odpowiedz

0

Myślę, że może to być kilka scenariuszy.

1) wprowadzić zmiany w fabryce kontrolera i zmienić go produkować contorllers bez sesji lub z jakiegoś realizacji sesji custome

2) spróbuj przeczytać ten article about sessionless controllers

+0

Zmiana implementacji sesji wydaje się niezbyt dobrym pomysłem, bez sesji kontrolerzy są wymienione w moim pytaniu. Oto implementacja "na działanie": http://sapoval.org/per-action-custom-sessionstateattribute – artvolk