A implementação personalizada provedor de estado de sessão em ASP.NET MVC
-
16-12-2019 - |
Pergunta
Eu estou trabalhando na implementação de um personalizado provedor de estado de sessão para o meu ASP.NET aplicativo MVC.A minha exigência é que eu tenho para armazenar os dados da sessão como xml
em uma tabela personalizada no Sql server.
Posso usar o existente estado de sessão sql fornecedor (substituir alguns métodos) ou tenho de criar a partir do zero por implementar a classe abstrata SessionStateStoreProviderBase
?
Solução
Por que você não está apenas usando o SQL server como seu provedor de estado?Você pode definir isso no config e isso acontece automaticamente, em seguida, o SQL server armazena os dados serializados dados binários e eficiente para recuperá-lo?
A resposta curta é sim, você pode, mas é re-inventar a roda.Você precisa usar os dados para qualquer outra coisa ou editar-se fora do processo?Eu estaria inclinado a usar um processo separado para isso.Você vai criar um pouco de trabalho para se fazer isso e você seria melhor apenas para salvar o xml de propriedade somwhere quando você definir em sessiopn se você precisa olhar para ele mais tarde.
Faça o seu documento xml em um objeto de sessão
Session["MyCustomXml"] = mydoc;
var mydoc = Session["MyCustomXml"] as XmlDocument;
em seguida, use a seguinte config então é armazenado no sql server.
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
cookieless="false"
timeout="20"
/>
Se você precisar de olhar mais tarde, basta salvá-lo no disco somwhere com segurança com o SessionId como o nome do arquivo para mantê-lo único.
Outras dicas
sim, você pode personalizar o seu provedor de classe Sessão, mesmo com o sql server ou oracle.Apenas herdar de uma classe em seu modelo de herdar de SessionStateStoreProviderBase e implementando os métodos necessários que ele envia, verifique a lista de métodos necessários aqui.
Se você quiser usar um exemplo, consulte aqui.Este exemplo usando odbc, mas simplesmente substituir por acesso de classe como OdbcConnection para SqlConnection e vice-versa.
Boa sorte.