2009-12-02 1 views
0

У меня есть .Net 3x-приложение, использующее стандартную сериализацию WCF и недавно настроенное приложение для использования состояния сеанса SQL Server и не могу хранить эти объекты в состоянии сеанса с сервером sql, только в proc состояние сеанса.Состояние сеанса SQL Server, вызывающее ошибку Serialization

Получение ошибки на различных классов, гласящим:

Невозможно сериализации состояния сеанса. В режиме «StateServer» и «SQLServer» ASP.NET будет сериализовать объекты состояния сеанса, и в результате не разрешаются объекты, не связанные с сериализацией, или объекты MarshalByRef. Такое же ограничение применяется, если аналогичная сериализация выполняется в пользовательском хранилище состояний сеанса в режиме «Пользовательский».

Я предположил, что сериализация wcf по умолчанию будет достаточной, но, по-видимому, нет. Любые идеи о том, что нужно сделать, чтобы исправить это, не редактируя все приложение и добавляя [Serializable] к классам?

ответ

1

Похоже, у вас есть четыре варианта:

  1. Переключение обратно в режим InProc
  2. сделать ваши объекты [Serializable]
  3. Вместо того чтобы хранить объекты контейнера высокого уровня в словаре Session, используйте нижний (например, строки, целые и т. д.)
  4. Избегайте использования традиционного состояния сеанса и вместо этого переключайте на альтернативный метод управления состоянием

Вариант 3, как правило, работает быстрее, чем 2, хотя это также больше работы.