ASP.NET Сервер состояния сеанса - Сохранение Несериализованных данных
Вопрос
Как вы знаете, в ASP.NET вы можете хранить данные сеанса в одном из следующих трех режимов:
- Впроц
- Состояние сеанса
- SQL Сервер
В режиме InProc вы можете хранить любые объекты данных, даже если они не сериализуемы.Однако в режимах состояния сеанса и SQL Server вы можете хранить только сериализованные данные.
В моем проекте у меня есть готовый портал, который использует режим "InProc" для хранения своего сеанса.Вместо этого мне нужно использовать состояние сеанса из-за некоторых проблем с масштабируемостью и обработкой сбоев.
Проблема в том, что этот портал внутренне хранит несериализованные объекты в контексте сеанса (т. е. Сохраненные объекты не реализуют интерфейс ISerializable).У меня нет доступа к их коду.Есть ли какие-либо обходные пути, чтобы я мог хранить объекты сеанса на сервере состояний без изменения их кода.У меня все еще есть доступ к их файлу web.config, если это каким-либо образом поможет.
Решение
AFAIK, простой ответ - нет.Если вы не возражаете изменить свой код, вы могли бы вставить объект-оболочку между фактическим объектом и вашим и заставить вашу оболочку иметь дело с сериализацией обернутого объекта (по сути, как суррогат сериализации) - но к тому времени было бы почти проще просто переписать код...
Что это за объекты?Как правило, объекты для состояния сеанса представляют собой простые классы данных, поэтому не должно возникнуть слишком большой проблемы с их сериализацией?
Другие советы
Сериализация создает представление объекта, которое может быть сохранено и прочитано для воссоздания состояния объекта.
Если объект содержит только типы значений, то вам может не понадобиться реализовывать ISerializable, а понадобится только атрибут [Serializable].
Чтобы сделать этот ответ более полезным или прямым к рассматриваемому вопросу:
Вы не можете сериализовать объект, который каким-либо образом не был выделен как сериализуемый.Любой другой общий способ повторного создания объекта может привести к тому, что объект не будет иметь того же состояния, которое у него было до того, как он был "сериализован".
Как упоминал Марк, вы могли бы сделать это, создав свою собственную сериализуемую "оболочку", но вам нужно было бы быть очень хорошо знакомым с рассматриваемым объектом, и у объекта должны были бы быть методы, которые позволили бы воссоздать его таким образом.