Domanda

Ho un'istanza di applicazione Web collegata a più database. Basato sul nome di dominio (ad esempio www.shop1.com, www.shop2.com, ..) Cambiano la stringa di connessione nel framework dell'entità.

shop1.com -> Database1

shop2.com -> Database2

shop3.com -> Database3
.

così lontano.

Sto anche utilizzando lo stato di sessione di SQL Server e voglio cambiare il database di sessione di stato proprio come sto cambiando il database per i miei dati.

shop1.com -> SessionStateDatabase1

shop2.com -> SessionStateDatabase2

shop3.com -> SessionStateDatabase3
.

Grazie in anticipo per il tuo aiuto.


.

Ulteriori informazioni Se vuoi sapere perché sto facendo questo:

In realtà sto implementando multi-tenancy. La descrizione sopra mostra tre siti. In effetti, ne ho più di 50. e il numero di siti crescerà nei prossimi mesi. Nel momento in cui tutti i siti vengono distribuiti separatamente, il che significa che ogni volta che devo sbloccare una patch o un aggiornamento che distributo tutti i 50 siti. Mantenimento dei siti in questo modo sta diventando un incubo. Quindi stavo pensando di mettere da 5 a 10 siti in un'istanza, a seconda del loro utilizzo, in modo che io abbia meno casi da mantenere.

È stato utile?

Soluzione

In casi come questo, guardo sempre il codice sorgente del framework.Per prima cosa scoprivo dove la configurazione memorizza la stringa di connessione dello stato di sessione, allora trovo dove viene utilizzato.La classe privata System.Web.SessionState.SqlSessionState.SqlSessionStateStore ha un metodo OneTimeInit(), dove legge la stringa di connessione.Qui ho notato che c'è un sostegno per il partiniong, vedi qui: http:// msdn.microsoft.com/en-us/library/aa478952.aspx .Non ho mai sentito parlare di questo prima, ma sembra che faccia esattamente quello che vuoi, è possibile memorizzare lo stato di sessione in più database, in base a qualsiasi tipo di criterio che desideri.+1 Per la domanda a proposito, questa è una caratteristica fantastica.Inoltre, se non funziona, è possibile provare a implementare la propria implementazione SessionStateStoreProviderBase, che è pubblicamente sovrascrivibile.

Altri suggerimenti

Poiché la connessione dello stato della sessione non è gestita dal codice, non sarà possibile cambiarlo.È una configurazione a livello di applicazione e il controllo oltre il controllo del codice.Ma la necessità di questo non dovrebbe sorgere.Un singolo server sarà in grado di gestire lo stato della sessione per tutti e tre i domini che hai.L'unica preoccupazione forse quando un utente si sposta da shop1.com a shop2.com e conserva ancora la vecchia sessione.

C'è qualche ragione per cui non considereresti correre (sto assumendo, lo stesso codice) come tre applicazioni Web separate?

    .
  • Un errore non toglie tutti e tre i siti
  • Lo stato della sessione è separato dall'applicazione
  • consente ai siti di capacità di scala possono essere assegnati a diversi sistemi come dettati da crescita
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top