Pergunta

Eu entendo que todos os dados da sessão InProc sempre é ido quando seus w3wp recicla processo proprietário como ele só reside na memória w3wp.

Eu me perguntava embora se é possível armazenar em cache os dados da sessão quando a reciclagem acontece em algum lugar externo ao processo, e, em seguida, voltar a injectar (e reconstruir) a sessão quando se trata de volta. Dessa forma eu iria obter a velocidade de InProc com a confiabilidade do estado do servidor-like externalização quando necessário. Isso é possível?

Foi útil?

Solução

Não, isso não é possível. Não há nenhuma API para "aquecer" em processo de estado de sessão ou cache. solução tal seria de qualquer maneira confiável. Você poderia não gaurantee que a última coisa que seu aplicativo fez seria para exportar seu estado atual sessão, para que você nunca poderia contar com os dados importados para ser de qualquer maneira atual.

Você pode usar o servidor de estado out-of-proc no mesmo host como sua aplicação web. Em seguida, a aplicação web pode reciclar livremente, mantendo as informações de estado intacto. Este é um pouco mais rápido do que usando SQL Server para gerir as sessões, como você não tem que lidar com a sobrecarga de SQL ou de trânsito de rede para outra máquina, a única maneira é pior do que em processo de estado de sessão é que os dados tem que marshal em limites de processo, mas contanto que você não tem uma enorme quantidade de mudar rapidamente os dados da sessão, isso não deve ser perceptível a todos.

Existem também outras alternativas, como Microsoft Código projeto chamado "Velocity" ou de ScaleOut Software SessionServer (entre outros tenho certeza) que mecanismos de cache oferecem distribuído que pode manter o estado da sessão ou cache sincronizado entre os servidores em um farm de servidores sem ter que recorrer ao uso de SQL server.

Ao contrário do que outro usuário postou, eu não iria usar ViewState para armazenar dados de sessão se possível. Por um lado, não é o estado da sessão verdade, se um usuário se move para trás ou para frente pode ser perdido. Em segundo lugar, é bastante inseguro. Em terceiro lugar, ele faz com que o inchaço página enorme se abusou.

Outras dicas

Talvez você pode armazenar informações suficientes em um cookie (ou em ViewState) para que você possa recriar uma sessão com base nesses dados, no caso o processo de trabalho foi reciclado.

Ou você pode criar o seu próprio servidor de estado (serviço por exemplo, uma janela) onde armazenar parte de sua sessão e aceder a este serviço a partir do aplicativo web através de comunicação remota ou similar.

Você deve usar o SQL Server para estado da sessão, se essa é a sua intenção. O que você quer são sessões que podem recuperar a partir de um final completo do processs host. Nem inproc ou StateServer apoio que como uma vez eles vão para baixo eles perdem todos os dados. Você pode escrever seu próprio método de Estado, mas que seria laboriuous. Aqui está direções se você quiser fazer isso:

http://www.exforsys.com/tutorials/asp.net-2.0/asp.net-2.0-customizing-the-session-state-mechanism.html

O que você pode querer fazer é não usar sessões em tudo, mas sim confiar mais em ViewState. Se você tem um site de alto tráfego que é uma boa maneira para empurrar a carga de trabalho fora aos clientes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top