Исключение сериализации asp.net генерируется при реализации сеанса на сервере SQL - PullRequest
0 голосов
/ 24 февраля 2012

"исключение сериализации, выданное в System.Web.Profile.DefaultProfile"

Я использую множество пользовательских классов, но пометил их все атрибутом serializable . Первоначально веб-сайт загружается должным образом на странице по умолчанию, но как только происходит перенаправление на другую страницу, которая наследует пользовательский класс «BasePage», вместо класса страницы по умолчанию выдается это исключение:

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

одно из выражений в intellitrace говорит что-то вроде: «не удалось сериализовать System.Web.Profile.DefaultProfile не удалось сериализовать». Разве это не встроенный объект .NET, и если это так, я не могу предположить, что он должен быть сериализуемым во всех случаях ???

Ответы [ 3 ]

1 голос
/ 25 февраля 2012

Я только что столкнулся с этой же проблемой вчера.Пользовательский объект не обязательно является проблемой, но объекты внутри него.Если у вас есть такие вещи, как System.Drawing.Image или Dictionary <> или что-то еще, что по своей сути не сериализуемо, оно взорвется.Так что тебе придется покопаться.Я должен был сделать что-то вроде преобразования списка в строку [], чтобы передать его веб-службе (которая получает список, но показывает в intellisense как получение строки []).

Так что я бы переосмыслил,Мы также узнали, что после того, как мы заработали на тестовом сервере, мы еще не закончили.Как только мы опубликовали веб-сервис, начали появляться другие проблемы, которые были похожи.Изображения не были сериализуемыми, поэтому мы преобразовали их в байты [] перед их отправкой. Словари также не были сериализуемыми.

Я понимаю, что это не очень хороший ответ, но, надеюсь, поможет.

0 голосов
/ 25 февраля 2012

В моем конкретном случае я решил эту проблему, создав новый пользовательский класс с атрибутом Serializable со свойством, которое возвращало бы объект HttpContext.Current.Profile.И затем всякий раз, когда мне нужно было добавить профиль в сессию, я добавляю его через свойство этого вновь созданного класса.Спасибо @swannee и @Sinaesthetic за их идеи.

0 голосов
/ 24 февраля 2012

Он встроен в ASP.Net, но это не значит, что он сериализуем.Есть много каркасных классов, которые не сериализуются.

Кроме того, профиль по умолчанию предназначен для работы с механизмом профиля asp.net.Почему вы пытаетесь сохранить это в сессии?У него уже есть собственный настраиваемый механизм хранения.Я думаю, что это может быть случай, когда вы находитесь в месте, где вы боретесь с системой.

...