Я работаю над aspx-приложением (C#), где я использую HttpSessionState
для сохранения различных объектов в коде, расположенных между изменениями вида. Некоторые из этих объектов содержат общие списки (List<T>
), но эти списки, похоже, не сохраняются, когда я использую базу данных SQL для хранения состояния (sessionState mode = "SQLServer"
). Все остальные свойства объекта сохраняются, но когда я пытаюсь получить список, я получаю пустые списки.Общие списки в HttpSessionState, хранящиеся в SQL
Самое забавное, что все работает нормально, если я использую sessionState mode = "InProc"
.
Мои классы имеют атрибут Serializable
. Я запускаю C# /. NET 4.0.
Любые идеи были бы оценены!
EDIT:
Просто уточнить с каким-то кодом (не дословным!).
У меня есть классы, я хочу, чтобы сохранить (экземпляры) в моем государстве Session:
public class MyClass
{
public string Property1 { get; set; }
public string Property2 { get; set; }
public List<MyOtherClass> Property3 { get; set; }
}
public class MyOtherClass
{
public string AnotherProperty1 { get; set; }
public string AnotherProperty2 { get; set; }
}
Тогда, в моем коде позади - одно действие сохраняет объекты предыдущих классов:
public void MyMethod()
{
MyClass myClass = new MyClass()
{
Property1 = "One string",
Property2 = "One other string",
Property3 = new List<MyOtherClass>() { new MyOtherClass() { AnotherProperty1 = "One", AnotherProperty2 = "Ohter" } }
};
HttpContext.Current.Session["MyKey"] = myClass;
}
... и другое действие восстановит этот объект:
public void MyOtherMethod()
{
MyClass myClass = (MyClass)HttpContext.Current.Session["MyKey"];
int c = myClass.Property3.Count; // Will be 0!!
}
myClass.Property1
Так и myClass.Property2
будет удерживать строки, установленные мной ранее, но myClass.Property3
- пустой список.
Вы настроили приложение для использования SQL-сервера для состояния сеанса? см. этот пост на ho wto сделать это http://stackoverflow.com/questions/7394357/asp-net-4-0-storing-session-in-sqlserver –
Да. Это приложение размещено на веб-сервере с несколькими сайтами, и в основном все остальные сайты на сервере используют SQL для состояния сеанса. Также - помните, что в моем приложении он хранит все данные в объектах, кроме списков (которые инициализированы, но пусты)! – Superhubert
Можете ли вы показать свой код, где вы храните и читаете объект списка? –