Diagnosticare a livello di programmazione la perdita di sessione ASP.Net a causa del riciclaggio delle applicazioni?

StackOverflow https://stackoverflow.com/questions/401311

  •  03-07-2019
  •  | 
  •  

Domanda

Abbiamo un'applicazione ASP.Net 2.0 (VS2005) che funziona bene localmente, ma a volte perde lo stato della sessione quando viene distribuita sul server remoto.

Sospetto che un possibile problema con IIS sia in fase di ricollegamento dell'applicazione e di conseguenza spazzamento dello stato della sessione degli utenti. Tuttavia, il server è remoto non sotto il nostro controllo ... quindi non possiamo semplicemente avviare IIS Admin e controllare le impostazioni dell'applicazione. Un'altra possibile causa, ovviamente, sarebbe che i clienti rifiutano il cookie della sessione ASP.Net per qualche motivo.

(Abbiamo praticamente escluso un errore nel nostro codice perché è un'app semplice e non tenta mai di rimuovere nulla dall'oggetto Session ma ovviamente ... quelle sono le ultime parole famose, eh?)

Come lo diagnostichi in modo programmatico?

Sto principalmente cercando di capire come diagnosticare il problema; se il colpevole è il riciclo eccessivo delle applicazioni, non dovrebbe essere troppo difficile codificarlo.

Sono sicuro che questo è un problema comune per gli sviluppatori ASP.Net.

È stato utile?

Soluzione

Ecco un paio di link che possono aiutarti a risolvere questo problema se puoi cambiare alcune impostazioni:

Registrazione degli eventi di riciclaggio dei processi di lavoro in IIS 6.0 (IIS 6.0)

Registrazione degli eventi di arresto dell'applicazione ASP.NET

Altri suggerimenti

Aggiungi un po 'di codice di registrazione al metodo Global.asax Application_Start e sarai in grado di vedere quando / se la tua perdita è causata dal riavvio dell'applicazione (o almeno, vedrai quando il server si avvia, se sai una sessione è stata persa allo stesso tempo, conosci il tuo colpevole).

Una soluzione alternativa sarebbe quella di utilizzare lo stato di sessione fuori proc (probabilmente dovrebbe essere basato su SQL se non si ha il controllo del server). Il tuo codice richiede un po 'di lavoro in più perché tutto ciò che memorizzi in Session deve essere serializzabile, ma risolve il problema dei riavvii delle app che causano la perdita della sessione.

IIS configurato per più di un thread di lavoro (Web Garden) nel pool di applicazioni può causare la perdita dello stato della sessione.

Ho trovato uno scenario in cui la sessione viene persa: in una pagina asp.net, per un importo, il campo della casella di testo ha caratteri non validi e seguito da un recupero della variabile di sessione per altri scopi. Dopo aver pubblicato il numero non valido analizzato tramite Converti. ToInt32 o double solleva un'eccezione di prima possibilità, ma l'errore non viene visualizzato su quella riga, invece di ciò, la sessione essendo nulla a causa dell'eccezione non gestita, mostra l'errore al recupero della sessione, ingannando così il debug ...

SUGGERIMENTO: prova il tuo sistema a fallire- DISTRUTTIVO .. inserisci abbastanza spazzatura in scenari non correlati, sarai in grado di riprodurre anche questa macchina sulla tua base di codice locale ... :)

Spero che sia d'aiuto, hydtechie

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top