2008-12-30 16 views
5

Se me ha encomendado la tarea de convertir un sitio ASP.NET existente de la administración de sesión de InProc a utilizar el servidor de estado ASP.NET.Serializar la colección de control de ASP.NET

Por supuesto, lo que esto significa es que todo lo almacenado en la sesión debe ser serializable.

Una de las páginas más complicadas de la aplicación es actualmente el almacenamiento de una colección de control ASP.NET en la sesión. Esto está fallando miserablemente porque los controles no se pueden serializar automáticamente.

Si no se reescribe completamente cómo funciona la página para evitar la necesidad de almacenar la colección de control en la sesión, ¿alguien tiene un truco/solución para hacer la colección serializable?

Respuesta

7

Reescriba la página. Te agradecerás más tarde. Seguramente habrá otros problemas si el "programador" original (y utilizo ese término sin apretar aquí) pensó que era una buena idea almacenar una jerarquía de control en sesión.

+0

Gracias por la sugerencia, llegué a esta conclusión también y pasé gran parte de la semana pasada rehaciendo la página para que no tenga que almacenar los controles en la sesión en absoluto. La re-escritura parece estar funcionando bien. –

+0

Me alegra oírlo. A veces solo tienes que morder la bala y atravesar la maleza crecida con un machete gigante hasta que las cosas se vean bien. :-) –

0

La primera respuesta que me viene a la mente es hacer una reescritura parcial (no creo que haya una respuesta fácil para esto). Si se trata de una pequeña cantidad de tipos de control, escriba sus propios controles que hereden de esos controles y también implemente ISerializable. Luego, usando buscar y reemplazar, reemplace los controles de la página con sus versiones. Si está usando una gran cantidad de tipos de control, puede pasar más tiempo ampliando los tipos estándar que refacturando la página.

El trabajo va a consistir en la serialización y deserialización de los controles cuando los inicializa, para asegurarse de que está capturando lo que necesita (los valores de TextBox, IsSelected, etc.).

Esto es obviamente un truco, pero si su prioridad realmente no es reescribir la funcionalidad de esa página particuar, esto podría funcionar para usted. Entonces, por supuesto, debe agregar esta solución a la "deuda técnica" que está acumulando su aplicación, para asegurarse de que siempre esté en el radar de alguien para refactorizar en algún momento.

2

No almacene colecciones de control en estado de sesión. Tess tiene muchos artículos sobre esto, por ejemplo this one.

Cuestiones relacionadas