2013-10-03 3 views
1

Я нашел это поведение случайно, так как я возвращаю количество элементов в сеансе в сообщении об ошибке и обнаружил, что в некоторых сеансах было до 120 элементов (они должны иметь 1 !). В ходе дальнейшего расследования я обнаружил, что каждый запрос, кажется, добавляет элемент в сеанс. Это все отрицательные целые числа, например -710, -140 -528. Кажется, я не вижу шаблона в том, что число приходит.Новый элемент, добавленный в сеанс по каждому запросу

Я проверил свой код для любых взаимодействий с объектом Session, и насколько я могу судить, это не я. Я храню один элемент в сеансе, который является моим собственным объектом, который имеет на нем ряд других свойств. Мое состояние сеанса - это SQL-сервер, и я только сериализую определенный набор значений, которые необходимо сохранить.

Кто-нибудь видел что-нибудь подобное или имеет какие-либо советы о том, где я могу устранить неисправность?

Заранее спасибо.

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

int itemCount = Session.Count; 
for (int i = 0; i < itemCount; i++) 
{ 
    object o = Session[i]; 
} 

- здесь я добавляю свой пользовательский объект к сеансу. Это называется в начале сеанса и на моей главной странице. Он работает на принципе «получить, но если не там, создать».

HttpSessionState Session = HttpContext.Current.Session; 
HttpRequest Request = HttpContext.Current.Request; 

if (Session == null) 
    return null; 

SessionData sessionData = (SessionData)Session[StaticNames.SESSION_NAME]; 
if (sessionData == null) 
{ 
    sessionData = new SessionData(); 
    Session.Add(StaticNames.SESSION_NAME, sessionData); 
} 

У меня также есть это, чтобы получить объект SessionData из сессии:

public SessionData(SerializationInfo info, StreamingContext ctxt) 
{ 
    this.IsManualLogin = (bool)info.GetValue("IsManualLogin", typeof(bool)); 
    this.HasAskedUserForLocation = (bool)info.GetValue("HasAskedUserForLocation", typeof(bool)); 
    // ... etc, more items for all users here 

    int? loginID = null; 
    try 
    { 
     loginID = info.GetInt32("LoginID"); 
    } 
    catch 
    { 
     return; 
    } 

    this.LoginID = loginID.Value; 
    // ... etc, more items for logged in users only 
} 

Существует также эквивалентный метод добавления этих данных в SerializationInfo используется для SqlSessionState.

+0

Можете ли вы показать код, в котором вы показываете количество элементов в сеансе? И код, который добавляет элемент в сеанс (контекст вокруг этого важен, поэтому обязательно указывайте, откуда этот код вызывается)? – jadarnel27

+0

Спасибо Ядарнелю, я отправил много кода, другие вопросы, пожалуйста, не стесняйтесь спрашивать. На самом деле я собираюсь немного отредактировать его, вам действительно не нужно видеть КАЖДЫЙ элемент, который я придерживаюсь там ... –

+0

Значения этих записей изгоев сессии являются отрицательными целыми числами? Каковы ключи для этих записей? Это может быть ключом к тому, что не так. Спасибо за ваш быстрый ответ при добавлении кода, кстати. – jadarnel27

ответ

1

Кредит скромный jadarnel27.

Оказывается, элемент управления Ajax Control Noit не позволяет добавлять целое число в ваш сеанс по каждому запросу. Мой сайт имеет авто 40 секундное обновление, похожее на facebook, так что это, вероятно, привело бы к тому, что в какой-то момент все рушится, и мне повезло найти его сейчас. Если кто-либо еще подумает об использовании элемента управления NoBot, будьте предупреждены об этом поведении!

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