Pregunta

Estoy trabajando en implementar un proveedor de estado de sesión personalizado para mi aplicación ASP.NET MVC.Mi requisito es que tengo que almacenar los datos de la sesión como xml en una tabla personalizada en el servidor SQL.

¿Puedo usar el existente? proveedor de estado de sesión SQL (anulando algunos métodos) o tengo que crear desde cero implementando la clase abstracta SessionStateStoreProviderBase?

¿Fue útil?

Solución

¿Por qué no utiliza simplemente el servidor SQL como su proveedor estatal?Puede configurarlo en la configuración y esto sucede automáticamente, luego el servidor SQL almacenará los datos como datos binarios serializados y los recuperará de manera eficiente.

La respuesta corta es sí, se puede, pero se trata de reinventar la rueda.¿Necesita utilizar los datos para cualquier otra cosa o editarlos usted mismo fuera del proceso?Me inclinaría por utilizar un proceso separado para esto.Vas a crear un poco de trabajo para ti mismo al hacer esto y sería mejor simplemente guardar la propiedad xml en algún lugar cuando la configures en sessiopn si necesitas verla más tarde.

Haga de su documento xml un objeto de sesión

Session["MyCustomXml"] = mydoc;

var mydoc = Session["MyCustomXml"] as XmlDocument;

luego use la siguiente configuración para que se almacene en el servidor SQL.

<sessionState 
            mode="SQLServer"
            sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
            cookieless="false" 
            timeout="20" 
    />

Si necesita verlo más tarde, simplemente guárdelo en el disco en algún lugar seguro con SessionId como nombre de archivo para mantenerlo único.

Otros consejos

Sí, puedes personalizar la sesión de tu proveedor de clases incluso con SQL Server u Oracle.Simplemente herede de una clase en su modelo heredando de SessionStateStoreProviderBase e implementando los métodos requeridos que envía, verifique la lista de métodos requeridos aquí.

Si desea utilizar un ejemplo, consulte aquí.Este ejemplo usa odbc pero simplemente reemplaza la clase de acceso como OdbcConnection a SqlConnection y viceversa.

Buena suerte.

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