Prós e contras do uso ASP.NET servidor de Estado da sessão (em vez do InProc)?

Antes de começar a usar o servidor de Estado de sessão para o benefício de tornar o estado de sessão mais robusto nos meus aplicativos em comparação com o estado do InProc, gostaria de encontrar uma lista de prós e contras para avaliação.

Update 1 : também sobre a reciclagem do pool de aplicações sobreviventes?

Update 2 : E quanto à longevidade das sessões e dos seus finais?

Author: John K, 2010-04-26

6 answers

Aqui está a análise canónica dos prós e contras das suas três opções, do Rob Howard. ASP.NET estado da Sessão Artigo:
  • Em processo. Em processo irá executar melhor porque a memória de Estado de sessão é mantido dentro do ASP.NET processo. Para aplicações web hospedadas em um único servidor, aplicações em que o Usuário é garantido a ser redirecionado para o servidor correto, ou quando os dados de Estado de sessão não é crítico (no sentido de que ele pode ser reconstruída ou repovoada), este é o modo a escolher.

  • Fora de processo. Este modo é melhor usado quando o desempenho é importante, mas você não pode garantir a que Servidor um usuário irá solicitar uma aplicação. Com o modo fora de processo, você obtém o desempenho da leitura a partir da memória e a confiabilidade de um processo separado que gerencia o estado para todos os servidores.

  • SQL Server . Este modo é melhor utilizado quando a confiabilidade de os dados são fundamentais para a estabilidade da aplicação, pois o banco de dados pode ser agrupado para cenários de falha. O desempenho não é tão rápido quanto fora de processo, mas o tradeoff é o maior nível de confiabilidade.

As opções fora de processo (aka "StateServer") e do servidor SQL sobrevivem aos reiniciamentos de aplicações web (incluindo o ciclo de agrupamento de aplicações) e ambos disponibilizam dados de sessão para vários servidores num cluster / exploração.

Finalmente, pode ir. sem dizer, mas a configuração básica em processo é a mais fácil de configurar, que é um "pro" significativo em muitos ambientes. Tim Sneath's ASP.NET estado da sessão: considerações de arquitectura e desempenho adiciona algumas informações adicionais, e o tópico MSDN nos modos de Estado da Sessão é uma fonte fiável e actualizada.
 28
Author: Jeff Sternal, 2010-04-27 16:35:18

O servidor de Estado é um grande (!) escolha para começar. Por quê? Porque isso significa que sua aplicação é agora compatível com quaisquer modos de armazenamento fora de processo.

Se actualmente desenvolver o seu site com {[[0]} e quiser mudar-se para StateServer ou SqlServer mais tarde, poderá ter problemas com a serialização. Nem sempre, mas acontece.

Alguns exemplos incluem (alguns já mencionados):

  • as operações começam a agendar a lista de aplicações IIS regulares recicla sem o teu conhecimento.
  • a memória está a esgotar-se regularmente
  • Você estará trabalhando com um balanceiro de carga na produção e não pode garantir que o mesmo site receberá o mesmo pedido.
Portanto, é melhor resolver isto o mais depressa possível. É apenas uma mudança de configuração e um início de serviço; Boom!

O que também significa, é se você decidir ir por uma rota completamente diferente de armazenamento de sessão, como usar o Redis (Distributed Key/Value Store) ou RavenDB (Document Database), você já está ordenado.

É realmente um bom investimento de 1 minuto de trabalho. Você está agora pronto para fazendas web, balancers de carga e qualquer outro sistema de gerenciamento de sessão que você decidir prototype contra.
 7
Author: Dominic Zukiewicz, 2014-07-11 08:05:12

Vantagens:
1. Você pode acessar o mesmo estado de sessão através de máquinas.
2. O mesmo estado de sessão está disponível após recarregar o app_pool.

Desvantagens:
1. Mais lento do que no modo de processo.
2. Todos os objetos no estado de sessão têm que ser serializáveis.

 4
Author: kemiller2002, 2010-04-26 14:37:53

Eu diria que uma das grandes desvantagens de usar In_Proc {[3] } é que o estado de sessão pode ser perdido se o pool ou domínio do aplicativo for reciclado. Isso pode acontecer a qualquer momento, por exemplo, se o servidor está com pouca memória, etc. Eu, pessoalmente, nunca confio na sessão do In_Proc para nada que não queiras perder. Passei horas a depurar sites com problemas esporádicos só para descobrir que era porque o estado de sessão estava a ser perdido devido a um servidor que estava com pouca reciclagem de recursos (e, claro,, quanto mais você armazenar em sessão, menor os recursos do servidor que você usa. Lembre-se, se ele pode dar errado, então provavelmente vai dar errado em algum momento!

É por isso que normalmente uso O State Server para tudo menos dados de sessão triviais. A única desvantagem real que eu encontrei é que você precisa marcar classes como serializáveis, mas isso geralmente é trivial. Também é um pouco mais lento, mas isso é insignificante na maioria dos casos.

Há um bom artigo sobre isto sobre o IIS MSDN site.

 4
Author: Dan Diplo, 2010-04-26 15:13:48

Desvantagens das Sessões em ASP.NET

  • Cada variável é armazenada como objeto. Isso significa que você precisa converter o objeto para determinado tipo quando ler a variável de sessão.

  • Além disso, se a sessão estiver vazia, o objeto será nulo. Antes de ler a variável de sessão, você precisa verificar se ela é nula. Mesmo se a variável é inicializada antes, ela pode ser nula porque a sessão está expirada. Uma tentativa de usar o valor da sessão nula poderá devolver um excepcao. Se o valor da variável de sessão for nulo, a prática comum é usar algum valor padrão em vez de nulo sem significado. Se o valor não for nulo, você deve convertê-lo para o tipo apropriado porque todas as variáveis de sessão são tipo de objeto. Ao fazer todas estas coisas, você deve prestar atenção para evitar codificação difícil. Mais informações sobre a leitura e escrita das variáveis de sessão sobre a forma escalável e de manutenção que você pode ler em Como escrever, ler e apagar as variáveis de Estado de sessão tutorial.

  • O nome da variável é o tipo de texto. Se você Hard nome de código da variável, há uma opção para cometer erro de tipo em algum lugar. O problema é, se você tentar ler a variável de sessão que não existe, ASP.NET não retornará nenhuma exceção ou aviso. Ele irá simplesmente criar uma nova variável com o nome errado que tem valor nulo. Estes tipos de erros podem ser difíceis de encontrar.

  • Os dados da sessão não devem ser usados para armazenar dados sensíveis. Existe uma possibilidade de o usuário malicioso obter o id de sessão do visitante regular. Se o estado de sessão é usado para armazenar informações como:" permitir o acesso à área de administração ou não " ou algo assim, o atacante poderia ver os dados sensíveis do site, dados privados de outros, editar banco de Dados, Excluir conteúdo etc.

  • Se o modo InProc for usado, as sessões facilmente esgotam todos os recursos do servidor e, assim, diminuem as performances do site.

StateServer

SQL O servidor é mais confiável de todos os modos. Os dados da sessão estão intactos se ASP.NET reiniciar, mas também se o servidor SQL reiniciar.

O servidor de SQL também é a opção mais escalável.

O servidor SQL está frequentemente disponível no cenário de hospedagem Partilhada

Modo Personalizado

Tens controlo total sobre as sessões. É possível criar mesmo id de sessão personalizada.

Você pode suportar diferentes fontes de dados. Isso pode ser útil para armazenar dados de sessão em outro banco de dados, como Oracle, MySQL, MS Access etc.

Para quaisquer outros detalhes que possa Carregue aqui para ver ASP.NET vantagens do Estado da sessão . espero que a minha resposta te tenha ajudado.! :)

 3
Author: saikumar.tammisetty, 2015-01-21 04:39:59

Outra desvantagem é que você provavelmente terá um único ponto de falha se você fizer um servidor de estado remoto através de uma fazenda. Mesmo que não seja uma fazenda, ainda vale a pena correr localmente apenas para sobreviver app_pool IMO. Fomos apanhados na parte serializável, por isso, cuidado.

Também, fique de olho no Windows Server AppFabric para liberar, uma vez que ele terá uma réplica replicada / distribuída do servidor de Estado. Supostamente RTM em 1H2010.

 0
Author: , 2010-04-26 14:49:15