WEB: Server Session
copia linkDescrizione
Un'esigenza frequente nello sviluppo di un'applicazione è quella di svolgere elaborazioni più o meno lunghe che vanno eseguite in background e che non blocchino l'utente che le ha richieste.
Normalmente per sopperire a questa esigenza si utilizza un Servizio Batch che ogni tanto "sbircia" su un database per vedere se qualcuno ha richiesto qualche elaborazione e al termine dell'elaborazione si riporta l'esito sul database.
Ma perché creare un Servizio Batch quando basta lanciare dei Thread lato server?
Per questo nascono le Server Session: per svolvere lato server quello che in precedenza veniva fatto dal Servizio Batch con il vantaggio di poter interagire direttamente con la sessione senza dover passare dal database.
Cos'è e come funziona una Server Session?
Una Server Session è un thread che viene creato lato server tramite il metodo StartSession che può essere programmato tramite un comando (vedi il parametro QueryString) e che rimane in attesa di messaggi da gestire inviabili tramite il metodo SendSessionMessage finché non viene terminato tramite il metodo EndSession. Inoltre è possibile programmare dei timer che scattano solo lato server tramite il nuovo flag impostabile nella videata delle proprietà dei timer.
In sintesi la vita di una Server Session si può rappresentare così:
Start session
fire Initialize event
if (QueryString.startWith("CMD="))
fire OnCommand event
while (!session terminated)
{
tick server timers
handle message (fire OnSessionMessage event)
sleep 50ms
}
fire Terminate event
End session
Avvio automatico di una sessione all'avvio dell'applicazione
Per poter sostituire completamente un servizio batch occorre anche far sì che le elaborazioni possano partire anche senza interazione degli utenti. A questo proposito, attivando il nuovo flag "Start Server Session" nella videata delle proprietà dell'applicazione, l'applicazione al suo avvio, cioè quando viene avviato il Web Server, avvia automaticamente una sessione con il nome corrispondente alla propria MainCaption. Questa sessione, come tutte le sessioni avviate dall'utente, continuerà il suo ciclo di vita finché non viene terminata o dall'utente o dal sistema quando viene fermato il Web Server.
Funzionalità interessate
Elaborazioni in background senza Servizi Batch.
Note
- N.B. Le sessioni server sono condivise da tutti gli utenti, per cui possono essere usate anche per scambiare informazioni tra gli utenti. Ogni applicazione ha il suo pool di sessioni attive: se un'utente termina una sessione tutti gli utenti potranno conoscere che quella sessione è terminata. Viceversa se un utente ha avviato una sessione con un certo nome, gli altri utenti non possono creare altre sessioni con lo stesso nome.
- Le sessioni server lavorano in modalità RD0.
- Nel codice che si scrive per le sessioni server occorre tenere presente che non c'é una richiesta del browser, per cui funzioni come BrowserInfo e UserAgent non sono utilizzabili.
Ultima modifica: 23/03/2021 / Validità: da 9.5.4160