Сессия ASP.Net выглядит идеально для традиционного приложения WebForms, но они делают некоторые вещи, которые являются серьезной проблемой для современного приложения AJAX и MVC.
В частности, есть только 3 способа доступа к поставщику ASP.Net:
-
Блокировка чтения и записи (по умолчанию) - сеанс заблокирован от
AcquireRequestState
срабатывания доReleaseRequestState
. Если из браузера сразу появятся 3 запроса, они будут стоять в очереди на сервере. Это единственный вариант в MVC 2, но MVC 3 позволяет... -
Только для блокировки только для чтения - сеанс не заблокирован, но не может быть сохранен. Это выглядит как ненадежным, хотя, поскольку некоторые чтения, похоже, снова блокируют сеанс.
-
Сессия отключена - любая попытка чтения или записи на сеанс выдает исключение.
Однако с современным MVC-приложением у меня много событий AJAX, происходящих сразу - я не хочу, чтобы они были на очереди на сервере, но я хочу, чтобы они могли писать на сеанс.
Что я хочу - это четвертый режим: Грязное чтение, последние записи выигрывают
Я думаю (счастлив быть исправленным), что единственный способ сделать это - полностью заменить сеансы ASP.Net. Я могу написать собственный собственный поставщик, но ASP все равно вызовет его с одним из трех исправлений, которые он поддерживает. Есть ли способ сделать оптимизацию ASP.Net concurrency?
Это оставляет меня заменой всех вызовов на сеанс новым классом, который в основном делает то же самое, но не блокирует - это боль.
Я хочу сохранить как можно больше текущих файлов сеанса (в основном, идентификаторов сеансов в разных журналах) с минимальным количеством замены кода. Есть какой-либо способ сделать это? В идеале я бы хотел, чтобы HttpContext.Current.Session
указывал на мой новый класс, но без ASP.Net блокировал любые запросы.
Кто-нибудь уже сделал что-то подобное? Кажется странным, что со всеми приложениями AJAXey MVC это новая проблема с ASP.