Rambler's Top100 ASP.NET Некоторые трудности при переходе на режим(mode) хранения сессий в SQL сервере
  Rambler's Top100
С.Зубарев
ASP.NET Некоторые трудности при переходе на режим(mode) хранения сессий в SQL сервере

   При смене режима сохранений сессий на SQLServer возникают некоторые проблемы, которые не присущи режиму(mode) InProc.
web.config:
   <sessionState
         mode =  "SQLServer"
         timeout="1440"
         allowCustomSqlDatabase="true"
         sqlConnectionString="..........................."
   /> 

  В основном это проблемы с сериализацией: может появиться исключение

 Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, 
ASP.NET will serialize the session state objects, and as a result non-serializable
objects or MarshalByRef objects are not permitted. The same restriction applies if 
similar serialization is done by the custom session state store in 'Custom' mode. 

   Чтобы избавиться от этой ошибки нужно все свои классы, экземпляры которые нужно хранить в сессии, пометить как сериализуемые(перед этим нужно убедиться, что родительский класс сериализуем):
[Serializable]
public class MySerializableClass
   Кроме этого нужно следить за сериализуемостью свойств класса и private переменных, которые могут быть экземплярами несериализуемых классов, например наследники MarshalByRef, - их обязательно нужно помечать как несериализуемые.
   Например, если используется класс TableAdapter (который является наследником MarshalByRef) для получения данных из БД, который не сериализуем:
[Serializable]
public class MySerializableClass ....
.....
[NonSerialized]
private TableAdapter dbAdapter = .......;
.....
   Если переменную dbAdapter не снабдить атрибутом [NonSerialized], то при попытке сохранить в сессии экземпляр класса MySerializableClass, получим вышеуказанное исключение.


Программные продукты

Открытые коды