Abbiamo un'applicazione MVC.NET che rileva errori irreversibili al riavvio. Nel nostro gestore di eventi Session_Start, aggiungiamo l'id di sessione a un dizionario. Nel gestore Session_End, lo rimuoviamo. Si consideri la seguente sequenza di richieste:L'applicazione ASP.NET MVC attiva Session_Start più volte per una singola sessione
GET home.mvc
< applicazione riavvia >
GET main.css
GET banner.jpg
GET somedata.mvc
...
A causa del modo in cui l'applicazione è progettata, questo tipo di sequenza si verifica abbastanza frequentemente se si esegue una ricostruzione mentre l'applicazione è aperta in una finestra del browser. Non sarebbe terribilmente preoccupante se non che lo vedo anche negli ambienti di produzione. Ad esempio, si verificherà (anche se raramente) quando si modifica web.config.
Le richieste successive al riavvio sono tutte dovute ai collegamenti nella home page o alle chiamate AJAX da JavaScript.
Quello che osservo è che .NET gestisce le prime 5 richieste in parallelo. Ciascuna richiesta di questo tipo attiva l'evento Session_Start. Dopo un breve periodo, l'evento Session_End viene attivato 3 volte. Per essere chiari, ogni Session_Start corrisponde alla stessa identica sessione. Hanno tutti lo stesso ID di sessione e la proprietà IsNewSession è vera per tutti gli oggetti dello stato di sessione. Inoltre, gli eventi Session_End fanno non corrispondono alla sessione che viene uccisa. La sessione persiste, insieme ai dati memorizzati nello stato della sessione.
Ho bisogno di impedirgli di lanciare Session_Start più di una volta o di capire come dire quando Session_End non significa realmente che la sessione è terminata.
Che cosa è necessario affrontare? Stai dicendo che c'è una discrepanza tra il tuo dizionario e il dizionario interno di asp.net? A che punto trovi la discrepanza? –
Il dizionario è memorizzato in una variabile di applicazione o in una variabile di sessione? –
Il dizionario è una variabile di applicazione. –