Состояние сеанса недоступно в этом контексте - PullRequest
24 голосов
/ 04 августа 2011

Я хочу прочитать идентификатор сеанса в событии ошибки приложения, но всегда получаю сообщение об ошибке «Состояние сеанса недоступно в этом контексте».Зачем?Странно то, что у меня есть тот же код в другом приложении asp.net, и все работает отлично.

void Application_Error(object sender, EventArgs e)
{

        var sessionId = Session.SessionID;
        //skipped code

}

Ответы [ 4 ]

33 голосов
/ 04 августа 2011

Объект сеанса может быть недоступен, это зависит от того, когда произошла ошибка.

Например, если в Begin_Request произошла ошибка, сеанс не будет доступен, так как он еще не создан.

Таким образом, в итоге иногда это будет работать, иногда нет, в зависимости от того, когда произошла ошибка.

Лучше всего проверить состояние объекта сеанса перед доступом к идентификатору сеанса, например,

HttpContext context = HttpContext.Current;

if (context != null && context.Session != null) ...
2 голосов
/ 04 января 2013

проверить, отсутствует ли какое-либо событие в c #, сопоставленное с элементом управления или проблемой в части дизайна

1 голос
/ 02 августа 2018

Эта ошибка может появиться, если вы используете режим состояния Out-of-Process для сервера состояний ASP.NET.Вам нужно пометить все классы, которые вы хотите сохранить в состоянии сеанса, с атрибутом [Serializable]

1 голос
/ 04 августа 2011

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

Просто проверьте, является ли сеанс пустым вначале.

Simon

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