Сервер состояния сеанса ASP.NET - сохранение несериализованных данных - PullRequest
1 голос
/ 28 октября 2008

Как вы знаете, в ASP.NET вы можете хранить данные сеанса в одном из следующих трех режимов:

  • InProc
  • Состояние сеанса
  • SQL Server

В режиме InProc вы можете хранить любые объекты данных, даже если они не сериализуются. Однако в режимах Session State и SQL Server вы можете хранить только сериализованные данные.

В моем проекте у меня есть готовый портал, который использует режим InProc для хранения своего сеанса. Мне нужно использовать Session State вместо этого из-за некоторых проблем масштабируемости и обработки ошибок.

Проблема в том, что этот портал внутренне хранит несериализованные объекты в контексте сеанса (т.е. хранимые объекты не реализуют интерфейс ISerializable). У меня нет доступа к их коду. Есть ли обходной путь, чтобы я мог сохранять объекты сеанса в State Server без изменения их кода. У меня все еще есть доступ к их файлу web.config, если это поможет в любом виде.

Ответы [ 2 ]

1 голос
/ 28 октября 2008

Сериализация создает представление объекта, которое можно сохранить и прочитать для воссоздания состояния объекта.

Если объект содержит только типы значений, вам может не потребоваться реализация ISerializable, а только атрибут [Serializable].

Чтобы сделать этот ответ более полезным или направить вопрос на данный вопрос:

Нельзя сериализовать объект, который каким-либо образом не был удален, как сериализуемый. Любой другой общий способ воссоздания объекта может привести к тому, что объект не будет в том же состоянии, в каком он был до «сериализации».

Как уже упоминал Марк, вы могли бы сделать это, создав собственную сериализуемую «обертку», но вам нужно быть очень знакомым с рассматриваемым объектом, и объект должен иметь методы, которые позволят -создан таким образом.

1 голос
/ 28 октября 2008

AFAIK, простой ответ - нет. Если вы не возражаете против изменения своего кода, вы можете вставить объект-оболочку между фактическим и вашим объектом и заставить свою оболочку иметь дело с сериализацией обернутого объекта (по сути, как суррогат сериализации) - но к тому времени это будет почти легче просто переписать код ...

Что это за объекты? Как правило, объекты для состояния сеанса представляют собой простые классы данных, поэтому их сериализация не должна вызывать особых проблем?

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