2012-03-09 4 views
0

Мой друг спросил здесь questionСервер ASp.net State, имеющий дело с IRequiresSessionState и IReadOnlySessionState?

И тот, кто ему ответил, написал что-то интересное! (без каких-либо доказательств, источник).

Это имеет большее значение, если вы используете сеанс вне процесса состояние хранилища. В этом случае без интерфейса система все еще сохраняет данные сеанса в удаленной базе данных, даже если она не изменилась (система не отслеживает, были ли данные сеанса изменены во время запроса) , Когда вы используете интерфейс IReadOnlySessionState , фаза обратной записи пропускается.

Где, по его словам, IRequiresSessionState будет записывать сеанс (даже если адент изменен.)?

любые объяснения будут с радостью исключены.

ответ

2

Не может найти официальную документацию на этот счет, но розжиг dotPeek (или какой-либо другой дизассемблер) и имеющим осмотреться System.Web последовательно показывает, что:

  • Когда HttpContext.Handler является set, если обработчик реализует IRequiresSessionState , HttpContext._requiresSessionStateFromHandler установлен true;
  • этот последний частный член сообщает get ter за HttpContext.RequiresSessionState;
  • SessionStateModule (который я гонг, чтобы догадаться, всегда в трубопроводе модуля), в его EndRequest обработчик проверяет HttpContext.RequiresSessionState, и если это true, разговаривает с государственным провайдером сеанса для сохранения состояния.
+0

+1 хорошее исследование, спасибо! – tsemer