Проверка ASP .NET для сеанса - PullRequest
8 голосов
/ 14 июля 2009

Я хотел бы проверить существование Session в классе базовой страницы, прежде чем использовать его, но я обнаружил, что если он не существует, он выдаст исключение, просто проверив:

if (Session != null)
{
    Session.Remove("foo");
}

Будет выбрасывать это исключение:

Состояние сеанса может использоваться только в том случае, если для свойства enableSessionState установлено значение true, либо в файл конфигурации или в директиве Page. Пожалуйста, также убедитесь, что System.Web.SessionStateModule или пользовательский модуль состояния сеанса включены в \\ раздел в конфигурации приложения.

Проверка происходит в событии Load базового класса страниц, из которого происходят все мои страницы aspx. В приложении включен сеанс, а модуль указан в узле httpModules. Это приложение, которое часто использует сеанс, обычно без проблем.

Я получаю эту ошибку только на определенных страницах, и в большинстве случаев она ненадежна. Я знаю, что должен сделать что-то другое, чтобы предотвратить ошибку, но я не уверен, что?

Возможно, я вызываю сессию слишком рано в жизненном цикле? Не правильно ли я проверяю, доступен ли сеанс?

Ответы [ 5 ]

10 голосов
/ 14 июля 2009

Вы можете использовать такой метод, чтобы определить, использует ли текущий запрос сессию:

    public static bool RequestHasSession
    {
        get
        {
            return (HttpContext.Current.Handler is IRequiresSessionState);
        }
    }

Если вы не уверены, что работаете даже в веб-контексте, вам нужно заранее проверить, что HttpContext.Current не имеет значение null.

3 голосов
/ 14 июля 2009

Вы можете сделать свою проверку более безопасной - Page.Session оборачивает пустую проверку вокруг свойства Context.Session. Таким образом, вы должны иметь возможность извлечь Context.Session и проверить, является ли он пустым. Если это так, то состояние сеанса недоступно.

Но он должен быть доступен в Page_Load (), чтобы указывать на проблемы в других местах:)

0 голосов
/ 14 июля 2009

Попробуйте проверить HttpContext.Current.Session или даже HttpContext.Current (я часто это делаю в модульном тестировании, когда компоненты вызываются из ASP.NET, я получаю эти переменные, но когда я вызываю их из NUNIT У меня их нет в наличии)

0 голосов
/ 14 июля 2009

Проверяли ли вы страницы, которые выдают ошибку, для свойства enableSessionState директивы Page? Вы можете сделать это, перейдя на страницу .aspx и проверив, установлено ли для свойства enableSessionState значение true / false. Если он установлен на false, сделайте его true.

Также проверьте в файле web.config тег <pages /> и обновите его, добавив -

<pages enableSessionState="true" />

Ссылка: Здесь

0 голосов
/ 14 июля 2009

Вы не испытываете исключение из-за того, что определенная переменная Session является нулевой, а просто использует логику Session на странице, которая не настроена для связи с сервером состояния сеанса (что имеет смысл в некоторых случаях, когда это другая машина). Если это не проблема для вас, убедитесь, что для enableSessionState всегда установлено значение true.

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