Domanda

Ho un sito web in C # / ASP.NET che è attualmente in fase di sviluppo. Quando siamo in produzione, vorrei fare rilasci frequenti nel corso della giornata, come possiamo risolvere i bug e aggiungere funzioni (come questo: http://toni.org/2010/05/19/in-praise-of-continuous-deployment-the -wordpress-com-story / ).

Se si carica una nuova versione del sito o anche cambiare un singolo file, si butta fuori gli utenti che sono attualmente connessi e li fa ricominciare ogni forma e così via. C'è un segreto per essere in grado di fare le implementazioni senza interferire con gli utenti per i siti NET?

È stato utile?

Soluzione

Se si apporta una modifica a un file di configurazione, il contenuto di una cartella bin dell'applicazione, o cose del genere, il riavvio del processo di lavoro ASP.NET insieme con l'applicazione.

Questo si traduce in sessioni cancellati e gli utenti dei calci-out.

La soluzione è quella di utilizzare altri metodi di conservazione della sessione diversa da quella predefinita InProc.
È possibile raggiungere questo impostando il href="http://msdn.microsoft.com/en-us/library/ms178586%28v=VS.80%29.aspx" rel="nofollow noreferrer"> modalità stato sessione . Le opzioni SqlServer e StateServer forniscono ottimo rimedio per il vostro problema.

Modalità SqlServer è relativamente facile da impostare e ottenere installato e funzionante. (In sostanza, è solo la creazione di una banca dati, in esecuzione Aspnet_regsql, e poi specificando al config.) Se non si dispone di MS SQL Server o non si desidera utilizzarlo, è possibile utilizzare StateServer, o creare il proprio provider e utilizzare la modalità Custom.

L'unica limitazione è che è possibile memorizzare solo valori serializzabili con modalità SqlServer e StateServer.

Altri suggerimenti

Il motivo che state vedendo questo è perché si sta reimpostando il pool di applicazioni, quindi il ripristino della sessione di tutti.

Il percorso più pulito sarebbe quello di scaricare la sessione a un server di stato della sessione, o ridurre al minimo l'utilizzo della sessione.

Un modo per aggirare questo è se non è possibile scaricare la sessione è quello di distribuire sempre ad una nuova directory virtuale. L'URL pubblico di fronte poi basta reindirizza alla tua versione più recente. Tutti gli utenti che sono già registrati in continuerebbero ad utilizzare la versione precedente, ma tutti i nuovi utenti potrebbero utilizzare la nuova versione.

A seconda di cosa si memorizza nell'oggetto Session, si può essere in grado di ricostruire nel gestore Session_Start di Global.asax. Ho usato per fare questo in un'applicazione interna dove abbiamo veramente solo memorizzato l'identità dell'utente nella sessione, così abbiamo potuto semplicemente usare il loro cookie di autorizzazione per ricreare la sessione.

Una cosa da tenere a mente se si fa questo: dire un utente carica un modulo e poi le foglie per il pranzo, e si aggiorna la pagina mentre sono lontani. Se ritornano alla loro scrivania e inviare il modulo saranno la presentazione della vecchia versione del modulo per il nuovo code-behind.

I utenti Supponiamo che vengono cacciati perché il processo di applicazione web-server viene riavviato. Con sessioni utente di default vengono memorizzati nei dati di memoria e di sessione viene ucciso. fornitore Session è opzione configurabile nel web.config. Può essere la scelta di provider esterno (out-of-web-application-processo) sessione è un passo verso quello che vi aspettate.

scroll top