Сериализовать страницу ASPX? - PullRequest
3 голосов
/ 29 декабря 2010

Я нахожусь в ситуации, когда мне нужно использовать внешний сервер состояния сеанса, который требует сериализации всех моих сеансов. Я пытался сделать все классы, которые я храню в сеансах, сериализуемыми, используя атрибут [Serializeable()].

Тем не менее, я получаю следующую ошибку:

Невозможно сериализовать состояние сеанса.

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

Однако более интересным является трассировка стека:

[Исключение SerializationException: введите «ASP.useroverview_aspx» в сборке «App_Web_pwonykbc, версия = 0.0.0.0, Culture = нейтральный, PublicKeyToken = null» не помечен как сериализуемый.]

System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (тип RuntimeType) +9452985
System.Runtime.Serialization.FormatterServices.GetSerializableMembers (Тип типа, контекст StreamingContext) +247
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo () +160
System.Runtime.Serialization. System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write (WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +388
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize (Граф объектов, заголовок [] inHeaders, __BinaryWriter serWriter, логический fCheck) +444
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (поток serializationStream, граф объектов, заголовки [], логический fCheck) +133
System.Web.Util.AltSerialization.WriteValueToStream (значение объекта, средство записи BinaryWriter) + 1708

Тип ASP.useroverview_aspx - насколько я знаю ASPX-страница. Страница, которую я загружаю, является Useroverview.aspx. Однако я не пытаюсь сохранить эту страницу в сеансе. Так что эта ошибка заставляет меня задуматься.

Я попытался сделать следующее в коде:

[Serializable()]
public partial class UserOverview : Page
{
    private static readonly int TimerInterval = HttpContext.Current.IsDebuggingEnabled ? 2000 : 750;
    // ...
}

Это совсем не помогло!

Так что мне интересно, можно ли сериализовать страницу ASPX? Это не знаю, будет ли это иметь смысл. Я сомневаюсь в этом!

Спасибо ...

1 Ответ

3 голосов
/ 29 декабря 2010

Я нашел ответ .. И вы, ребята, были правы: у одного из моих объектов была ссылка на страницу.

У меня был объект Player, у которого был список событий. Одно из этих событий имело текущую страницу в качестве цели, что привело к проблеме.

Я присвоил событию следующий не сериализуемый атрибут:

[field: NonSerialized]

Тогда все работало нормально. И все они жили долго и счастливо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...