Обоснование IReadOnlySessionState - PullRequest
4 голосов
/ 02 июля 2010

Я только что реализовал обработчик, который использует IReadOnlySessionState, и мне было интересно, зачем нужен этот маркерный интерфейс. (Я понимаю, что это необходимо для доступа к переменным Session, мой вопрос заключается в том, почему это происходит с точки зрения разработчика инфраструктуры) они хотят использовать состояние сеанса, но мне интересно, возможно, я что-то упускаю.

Ответы [ 2 ]

8 голосов
/ 13 апреля 2012

Ты прав. IReadOnlySessionState интерфейс просто дает вам возможность использовать объект Context.Session.

Но если вы реализуете интерфейс IRequiresSessionState, ваш обработчик устанавливает эксклюзивную блокировку для текущего сеанса, поэтому все другие запросы (которые хотят использовать объект Session) в контексте того же сеанса будут ждать, пока ваш обработчик не завершит работу.

IReadOnlySessionState не очень хорошее имя, потому что на самом деле вы можете изменить SessionState в таких обработчиках, и вы не получите исключение. Вы просто берете на себя ответственность за сопутствующие проблемы.

3 голосов
/ 02 июля 2010

Да, AFAIK, вы правы. И IReadOnlySessionState, и IRequiresSessionState являются маркерными интерфейсами, которые защищают вас от того, что ваш обработчик становится тяжелее и медленнее.

Разница между ними заключается только в состоянии записи сеанса.

...