Атрибут SessionState в MVC 3 работает правильно? - PullRequest
7 голосов
/ 11 февраля 2011

Я управляю довольно большим проектом, написанным на asp.net webforms + mvc3, с большой базой пользователей и довольно большим ежедневным числом посетителей. Как правило, в данный момент возникает много запросов.

Один из моих контроллеров в MVC, который обрабатывает / изменяет размеры изображений на лету, имеет следующий атрибут:

[SessionState(SessionStateBehavior.Disabled)]

Теперь, если действие в контроллере пытается получить доступ к сеансу - оно, очевидно, выдает исключение - так что пока у нас все хорошо.

Проблема заключается в следующем: если я захожу в окно IIS Worker Processes (Win Server 2008 R2, IIS 7.5) и проверяю текущие запросы для этого сайта, я иногда вижу запросы к действию в этом контроллере. Их текущее состояние заблокировано в State: RequestAcquireState, Module Name: Session. Иногда в этом состоянии эти замки проходят секунду или две.

Разве весь смысл атрибута не был в том, чтобы запросы к контроллеру игнорировали состояние и не тратили время (и, возможно, были заблокированы), пытаясь получить состояние?

Если это так - я здесь что-то не так делаю или проблема кроется в другом месте?

1 Ответ

12 голосов
/ 15 февраля 2011

[перенесено из комментариев]

Если вы используете пользовательскую фабрику контроллера или обработчик маршрута, убедитесь, что они знают о поведении состояния сеанса контроллера. Чтобы пометить контроллер как не требующий состояния сеанса, требуется взаимодействие обоих этих компонентов. Изначально DefaultControllerFactory и MvcRouteHandler предназначены для работы с этим. См. DefaultControllerFactory.GetControllerSessionBehavior и MvcRouteHandler.GetHttpHandler для получения дополнительной информации. Если вы пишете пользовательские компоненты, вы можете использовать эти методы в качестве вдохновения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...