У меня есть Singleton объект в приложении, который имеет следующее свойство:
private AllocationActionsCollection AllocationActions
{
get
{
return HttpContext.Current.Session["AllocationOptions.AllocationActions"] as AllocationActionsCollection;
}
set
{
HttpContext.Current.Session["AllocationOptions.AllocationActions"] = value;
}
}
Я имею дело с одной ошибкой ( HttpContext.Current.Session ["AllocationOptions.AllocationActions"] равен нулю , даже если предполагается, что он всегда установлен в допустимый экземпляр ...). Я только что прочитал в MSDN, что HttpContext член экземпляра не гарантированно безопасен для потоков! Интересно, может ли это быть проблемой? Где-то в приложении может происходить скачок ресурсов, и момент, когда HttpContext.Current.Session ["AllocationOptions.AllocationActions"] равен нулю - это момент, когда метод задания AllocationActions используется с использованием этого оператора:
AllocationActions = new AllocationActionsCollection(Instance.CacheId);
Мои вопросы:
а) Я в шоке, что HttpContext.Current.Session не является поточно-ориентированным. Как безопасно использовать это свойство тогда?
б) есть ли у вас идеи, почему эта переменная Session может быть нулевой (хотя я почти уверен, что устанавливаю ее до того, как она будет использована в первый раз)?
Спасибо, Pawel
РЕДАКТИРОВАТЬ 1:
a) строка, которая инициализирует переменную сеанса, устанавливается каждые 2 минуты с помощью следующего оператора (выполняется в Page_Load)
AllocationActions = new AllocationActionsCollection(Instance.CacheId);
б) код, вызывающий метод get, вызывается в обработчиках событий (например, Button_Click)
в) в приложении нет пользовательских потоков. только общий обработчик HTTP