Определение того, какой элемент управления сериализуется
Как и в этом вопросе, у меня есть приложение, которое в значительной степени зависит от сеанса в процессе. Я сейчас пытаюсь переместить хранилище сеансов на локальный государственный сервер.
Я получаю ошибку:
Тип "System.Web.UI.Control" в сборке "System.Web, версия =4.0.0.0, культура = нейтральная, PublicKeyToken=b03f5f7f11d50a3a" не помечена как сериализуемая.
Проблема в том, что я не могу определить, какой элемент управления пытается быть сериализован.
Полное исключение и трассировка стека не показывают мне никакой дополнительной информации.
Есть ли способ определить, какой элемент управления пытается быть сериализован?
Использование ASP.net, IIS7, Framework 4.0
1 ответ
Сделайте глобальный поиск Session[
или же Session.Item
и найти все с = справа. Это все задания для сессии. Это не может мне больше, чем несколько сотен. Одним из них является System.Web.UI.Control. Это, вероятно, было введено в сессию, чтобы избежать попадания в базу данных. Перепишите этот код, чтобы сохранить DataTable или DataSet или другие значения вместо сохранения элемента управления.
Если у вас нет исходного кода, нет простого способа справиться с такой декомпиляцией, исправлением кода и перекомпиляцией.
Даже если вы отказываетесь от SqlSession, вы все равно можете прекратить помещать элементы управления пользовательского интерфейса в Session- это может вызвать проблемы OutOfMemory: http://blogs.msdn.com/b/tess/archive/2008/05/28/asp -сеть-память ты-буду-не-магазина-UI-объекты-в-кэша или с сессией scope.aspx