Я использую VS2010 и создал простой asp. приложение веб-форм, использующее для его тестирования сервер разработки.
Я пытаюсь сохранить пользовательские данные, запрошенные с сервера sql, в сеансе, так как я не хочу получать доступ к базе данных при каждом запросе. Я использую методы Application_AuthenticateRequest и Session_Start.
Первый раунд:
Вызывается AuthenticateRequest. Выполнялся следующий код:
public static void Initialize(string login_name, bool force_refresh)
{
HttpSessionState Session = HttpContext.Current.Session;
object o = Session == null ? null : Session["EMPLOYEE_DATA"];
if (force_refresh || o == null || o.GetType() != typeof(Employee) || (o as Employee).login_name!= login_name)
{
_current = UIManager.GetEmployee(login_name);
if (Session != null)
{
Session["EMPLOYEE_DATA"] = _current;
}
}
else
{
_current = (Employee)o;
}
}
Переменная _current - это частное статическое поле, опубликованное через статическое свойство. В первом раунде Session равен нулю, и я думаю, что это нормально, потому что Session_Start еще не вызван. Session_Start выглядит так:
protected void Session_Start(object sender, EventArgs e)
{
Session["EMPLOYEE_DATA"] = EmployeeFactory.Current;
}
В следующем раунде Session_Start, конечно, не вызывается, но в AuthenticateRequest я не могу получить доступ к сеансу. HttpContext.Current.Session имеет значение null, а ссылка this.Session вызывает исключение HttpException, в котором указано, что «Состояние сеанса недоступно в этом контексте».
Однако я могу получить доступ к сеансу из любого события page_load, но это плохая практика Думаю, что ставлю аутентификацию каждую page_load. Есть идеи, как мне получить доступ к сеансу?
Спасибо за совет,
Петер