Tuesday, January 1, 2008

Persistere la session in una web farm

. Tuesday, January 1, 2008

Tra le diverse strade per conservare la session in un'ambiente web farm c'è l'opzione StateServer.
Tale modalità presente sia nel Framework 1.1 che nel 2.0 permette di conservare la session su un server remoto, in tal modo si garantisce la conservazione della session anche quando l'applicazione web è installata su più server.
Per attivare le varie modalità di "preservazione" è necessario configurare l'attributo mode dell'elemento sessionState nel web.config.
Come prima cosa è necessario disporre della stessa chiave di crittografia specificata nell'elemento machineKey del machine.config o a livello di web.config.
Per sincronizzare la chiave di tutte le macchine(Web server) bisogna crearne una manualmente eliminando così l'impostazione AutoGenerate. Dalla stessa documentazione MSDN si evince che per creare una chiave e quindi garantire una corretta configurazione in una web farm bisogna far uso della classe RNGCryptoServiceProvider.
Altra cosa fondamentale da ricordare che l'applicazione web su tutti i server, deve presentare lo stesso path applicativo memorizzato nel metabase di IIS.
A questo punto si può procedere nella configurazione del servizio incaricato alla persistenza della session su un server.
Il servizio aspnet_state risiede al seguente path:
C:\WINDOWS\Microsoft.NET\Framework\versione\aspnet_state.exe
Per verificare che il servizio sia realmente in funzione(di default è spento) basta verificare in Strumenti di amministrazione>Servizi che il servizio Servizio stato di ASP.NET sia impostato su Automatico. In caso contrario si può attivare non solo da Servizi(Tasto destro>Proprietà>Tipo di avvio) ma anche da console con il seguente comando:
net start aspnet_state
La configurazione nel web.config:

   1: <sessionState mode="StateServer"
   2:   stateConnectionString="tcpip=nomeserver:42424"
   3:   cookieless="false"
   4:   timeout="20"
   5: />
La parte più importante riguarda l'attributo stateConnectionString in cui viene indicato il nome del server che può essere sia l'indirizzo IP che il nome della macchina, mentre 42424 è la porta che non può essere omessa e non dovrebbe essere possibile cambiarla(sia in Asp.Net 1.x che in 2.0).
Nel momento in cui si fa uso di tale modalità bisogna ricordarsi infine, che gli oggetti che possono essere conservati nella session devono essere serializzabili, quindi attenzione alle performance.

0 commenti:

Post a Comment