Сайт, который я написал, испытывает странную проблему, из-за которой он внезапно не распознает элементы, сохраненные в сеансе, сразу после того, как я сделал какое-либо обновление кода. Я искал Stackoverflow / google / etc и вижу, что некоторые другие люди имеют такую же проблему, но нигде не могут найти решение.
Вот примерно то, что происходит:
Если я добавлю товар в свою корзину, он сохранит List<BasketItem>
в сеансе. Если я затем внесу обновление в некоторый код (не BasketItem), переменная сеанса все еще существует, но .NET, похоже, не считает, что это List<BasketItem>
, хотя определенно так и есть.
Когда я пытаюсь получить список элементов корзины после изменения кода, он выдает InvalidCastException
, который просто не имеет никакого смысла, поскольку он в основном пытается сказать, что типы, между которыми он конвертируется, различны, даже если это не так.
Исключение составляет:
System.InvalidCastException:
[А] System.Collections.Generic.List 1[BasketItem] cannot be cast to
[B]System.Collections.Generic.List
1 [BasketItem]. Тип А происходит
от 'mscorlib, версия = 2.0.0.0, культура = нейтральная,
PublicKeyToken = b77a5c561934e089 'в контексте' LoadNeither 'в
место нахождения
"C: \ Windows \ сборка \ GAC_64 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll.
Тип B происходит от 'mscorlib, версия = 2.0.0.0, культура = нейтральная,
PublicKeyToken = b77a5c561934e089 'в контексте' LoadNeither 'в
место нахождения
'C: \ Windows \ сборка \ GAC_64 \ mscorlib \ 2.0.0.0__b77a5c561934e089 \ mscorlib.dll'.
Я использую StateServer для состояния сеанса и запускаю ASP.NET 3.5 SP1, если это помогает.
Код, который я использую ниже:
// for setting the basket
List<BasketItem> basketItems = new List<BasketItem>();
Session["basket"] = basketItems;
// for getting the basket
List<BasketItem> basketItems = (List<BasketItem>)Session["basket"];
На данный момент я использую 'as casting', чтобы не выдавать ошибку, но это означает, что корзина пользователя теряется при обновлении кода.
Любой совет будет высоко ценится!
Приветствия
Тим