2016-09-14 5 views
1

Когда я храню значение в сеансе и некоторое исключение возникает после этого, состояние сеанса может не сохраняться.Когда сохраняется состояние сеанса ASP.NET

Session["MyKey"] = value; 
throw new Exception("Test exception"); 

я узнал, что, если я использую режим InProc, значение получает сразу же сохраняется, так что, если происходит исключение, он хранится в любом случае.

Но если я переключусь на режим StateServer, значение не будет сохраняться, если возникло исключение. Я могу писать на сеанс, читать его снова из сеанса, но после возникновения исключения это все изменения, которые я сделал для состояния сеанса в этом запросе, будут отброшены (т. Е. Не будут сохраняться). И любой будущий запрос будет читать «старое» состояние сеанса.

Сначала я думал, что это связано с тем, что cookie сеанса не отправляется в ответ в случае исключения, но это происходит для уже существующих сеансов, и пользователи уже имеют свои идентификаторы. Он также явно отличается от InProc до StateServer, тогда как оба этих подхода обрабатывают файлы cookie одинаково, это просто уровень сопротивления, который отличается.

Как работает стойка состояния сеанса? В какой момент жизненного цикла запроса произошли изменения, которые фактически сохранялись до StateServer? Можно ли принудительно сохранить состояние сеанса, чтобы оно сохранялось даже после возникновения исключения?

+0

Может быть дубликат (или очень близко) к http://stackoverflow.com/questions/9985499/how-does-sql-server-session-state-persistence-work –

ответ

0

Документы говорят

https://msdn.microsoft.com/en-us/library/system.web.httpapplication.releaserequeststate.aspx

HttpApplication.ReleaseRequestState события. Происходит после завершения ASP.NET выполнения всех обработчиков событий запросов. Это событие заставляет государственные модули сохранять текущие данные состояния.

+0

Спасибо, Wiktor. Любая идея, если можно сохранить состояние сеанса вручную? Или почему не вызвано ReleaseRequestState в случае исключения? –

 Смежные вопросы

  • Нет связанных вопросов^_^