Pergunta

Eu tenho um exemplo de aplicativo da web conectado a vários bancos de dados.Com base no nome de domínio (por exemplo, www.shop1.com, www.shop2.com, ..) que eu mude a seqüência de conexão no Entity Framework.

shop1.com -> Database1

shop2.com -> Database2

shop3.com -> Database3

Tão longe, tão bom.

Eu também estou usando o Sql Server estado de sessão e eu quero mudar o estado de sessão do banco de dados assim como eu estou mudando de banco de dados para os meus dados.

shop1.com -> SessionStateDatabase1

shop2.com -> SessionStateDatabase2

shop3.com -> SessionStateDatabase3

Agradecemos antecipadamente por sua ajuda.


Mais informações se você quiser saber por que eu estou fazendo isso:

Na verdade, eu sou a implementação de multi-tenancy.A descrição acima mostra três sites.Na verdade, eu tenho mais de 50.E o número de sites vai crescer nos próximos meses.No momento, todos os sites são implantados separadamente, o que significa que sempre que eu tenho que lançar um patch ou uma atualização de implantar todos os 50 sites.Manutenção de sites dessa maneira é tornar-se um pesadelo.Então, eu estava pensando em colocar de 5 a 10 sites em uma instância, dependendo de seu uso, para que eu tenha menos instâncias de manter.

Foi útil?

Solução

Em casos como esse, eu sempre olhar para o código fonte do framework.Primeiro eu descobrir de onde a configuração armazena o estado da sessão seqüência de caracteres de conexão, então eu encontrar onde ele está sendo usado.A classe privada System.Web.SessionState.SqlSessionState.SqlSessionStateStore tem um método OneTimeInit(), onde lê a seqüência de caracteres de conexão.Aqui eu notei que não há suporte para partiniong, veja aqui: http://msdn.microsoft.com/en-us/library/aa478952.aspx .Eu nunca ouvi falar disso antes, mas parece que ele faz exatamente o que você quer, você pode armazenar o estado da sessão em vários bancos de dados, baseado em qualquer tipo de critérios que você deseja.+1 para a questão a propósito, este é um recurso interessante.Também, se não funcionar, você pode tentar implementar o seu próprio SessionStateStoreProviderBase execução, que é publicamente overridable.

Outras dicas

Desde a conexão do estado da sessão não é gerida pelo seu código, não será possível mudar isso.Um nível de aplicativo de configuração e o além de controle de código.Mas a necessidade, para isso não deve ocorrer.Um único servidor será capaz de gerenciar o estado da sessão para todos os três domínios que você tem.A única preocupação, talvez, quando um usuário se move de shop1.com para shop2.com e ainda mantém a antiga sessão.

Há alguma razão para que você não considere a possibilidade de executar ( eu estou supondo, do mesmo código), como três aplicativos web separados?

  • um erro não levar para baixo todos os três sites
  • o estado da sessão é separado por aplicação
  • permite a escala de capacidade de sites pode ser atribuído a diferentes sistemas como o crescimento dita
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top