Pregunta

Como ya sabe, en ASP.NET, puede almacenar datos de sesión en uno de los siguientes tres modos:

  • InProc
  • Estado de sesión
  • SQL Server

Para el modo InProc, puede almacenar cualquier tipo de objetos de datos, incluso si no es serializable. Sin embargo, en los modos Session State y SQL Server, solo puede almacenar datos serializados.

En mi proyecto, tengo un portal ya hecho que utiliza " InProc " Modo para almacenar su sesión. Necesito usar Session State en su lugar debido a algunos problemas de escalabilidad y manejo de fallas.

El problema es que este portal está almacenando internamente objetos no serializados en el contexto de la sesión (es decir, los objetos almacenados no implementan la interfaz ISerializable). No tengo acceso a su código. ¿Hay alguna solución alternativa para poder almacenar los objetos de sesión en State Server sin cambiar su código? Todavía tengo acceso a su archivo web.config si esto ayudaría en cualquier tipo.

¿Fue útil?

Solución

AFAIK, la respuesta simple es no. Si no le importa cambiar su código, puede inyectar un objeto envoltorio entre el objeto real y el suyo, y hacer que su envoltorio se ocupe de serializar el objeto envuelto (esencialmente como un sustituto de serialización), pero para entonces casi sería más fácil simplemente vuelve a escribir el código ...

¿Qué tipo de objetos son? Normalmente, los objetos para el estado de sesión serían clases de datos simples, por lo que no debería haber demasiados problemas para serializarlos.

Otros consejos

La serialización crea una representación del objeto que se puede almacenar y leer para recrear el estado del objeto.

Si un objeto solo contiene tipos de valor, es posible que no necesite implementar ISerializable, sino que solo necesite el atributo [Serializable].

Para que esta respuesta sea más útil o directa a la pregunta en cuestión:

No puede serializar un objeto que no se haya eliminado de alguna manera como serializable. Cualquier otra forma genérica de recrear un objeto puede hacer que el objeto no tenga el mismo estado que tenía antes de que se "serializara".

Como lo mencionó Marc, puede hacerlo creando su propio 'contenedor' serializable, pero tendría que estar más familiarizado con el objeto en cuestión, y el objeto tendría que tener métodos que le permitan ser re -creado de tal manera.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top