Problema dello stato della sessione ASP.NET del server Web IIS 7.5 con bilanciamento del carico


14

abbiamo un problema con un sito Web ASP.NET in cui le sessioni degli utenti si comportano in modo strano: i dati della sessione appaiono, scompaiono e riappaiono.

Penso di sapere qual è il problema:

  1. La nostra configurazione è 2 x WebServer con bilanciamento del carico + database di stato a sessione singola.
  2. L'archiviazione dello stato della sessione SQL ASP.NET sembra dipendere dall'ID istanza del sito Web IIS (ID metabase) per identificare in modo univoco l'ID del cookie della sessione in entrata e recuperare / archiviare i valori.
  3. L'ID istanza del sito Web IIS del sito Web è diverso su ciascuno dei server attivi (ID / W3SVC / 1 / Root sul server Web A, ID / W3SVC / 2 / Root sul server Web B).
  4. Il bilanciamento del carico non utilizza l'affinità del client, quindi ogni richiesta HTTP dell'utente può essere indirizzata a entrambi i server.

Pertanto, quando un utente accede al sito e si sposta, ogni chiamata HTTP può passare a uno dei server Web e quindi utilizzare un record dello stato della sessione con ID diversi a seconda del server. In effetti l'utente avrebbe contemporaneamente 2 istanze di sessione separate. Credo di averlo verificato come nella tabella ASPStateTempSessions del database , ogni ID cookie di sessione sembra corrispondere a 2 record con nomi quasi identici (i loro ID differiscono solo per gli ultimi caratteri, che credo siano un modificatore basato sull'AppID dal AspStateTempApplications table) creato a pochi secondi l'uno dall'altro.

Pertanto, lo stato della sessione sembrerà comportarsi in modo errato poiché le modifiche apportate a un record di sessione persistono solo per quel server Web. Se l'utente si sposta sull'altro server con bilanciamento del carico, i valori della sessione sembreranno scomparire o ripristinare.

Credo che la soluzione sia sincronizzare gli ID istanza IIS dei siti (ad es . Renderli entrambi / W3SVC / 1 / Root ), ma ho provato a modificare quel valore in IIS in Impostazioni avanzate e, sebbene sia stato salvato OK, ha appena reso sito restituisce 404s su quel server fino a quando non l'ho cambiato.

Ho trovato uno script VBS per questo problema, ma sembra essere solo per IIS 6, quindi sono preoccupato di provarlo. Qualcun altro ha riscontrato questa situazione su IIS 7.5 e come è stata risolta?


MODIFICA / SOLUZIONE

Il mio errore è stato che ho dimenticato di riavviare IIS dopo aver modificato l'ID istanza del sito in IIS. Successivamente, l'ID è stato aggiornato e le sessioni ASP.NET sono state sincronizzate sui due server Web.

Istruzioni complete:

  1. Desktop remoto sul server LIVE1, apri IIS Mgr, fai clic sul sito problematico e scegli Impostazioni avanzate nella barra laterale.
  2. Cambia l'ID in qualcosa di unico, ad es. 10. Fai clic su OK.
  3. Riavvia il servizio Web ( c:\windows\system32\iisreset /restart)

Fai lo stesso per LIVE2 (assicurati che l'ID sito sia lo stesso di LIVE1)

Si noti che l'ID del sito influisce sulla posizione dei file del sito, ad esempio la cartella dei file di registro diventerebbe C:\inetpub\logs\LogFiles\W3SVC10ad esempio.

Si noti inoltre che si potrebbe fare queste modifiche manualmente modificando il sito id attributo nel file di configurazione di IIS su ciascun server: C:\Windows\System32\inetsrv\config\applicationHost.config. Richiede i privilegi di amministratore e in seguito deve essere ripristinato.

Risposte:


11

A giudicare dalla tua domanda sembra che tu abbia un server di stato sessione centrale (DB?) Che tiene traccia dei dati della sessione?

È inoltre necessario sincronizzare la chiave della macchina utilizzata per la crittografia affinché l'autenticazione di moduli ecc. Funzioni. Ciò potrebbe influire anche sull'identificazione della sessione, non ne sono sicuro.

Configurazione dei tasti macchina in IIS 7

Inoltre, è necessario utilizzare la configurazione condivisa tra le macchine, potrebbe risolvere il problema con chiavi di macchine diverse.

Sincronizzazione della configurazione IIS per Web Server Farm?

EDIT: Quando hai cambiato l'ID del sito, hai provato a riavviare il gestore IIS per vedere se il webroot era cambiato? Forse la configurazione è collegata all'ID, il che significa che una modifica dell'ID modifica anche cose come la radice del documento, ecc


Grazie per le idee di Jishi ma avevo già sincronizzato il machineKey nel web.configs. Immagino che sto davvero cercando un modo per cambiare l'ID istanza IIS di un sito senza dover rimuovere e riconfigurare completamente i siti sui server web.
James McCormack,

Quando hai cambiato l'ID del sito, hai provato a riavviare il gestore IIS per vedere se il webroot era cambiato? Forse la configurazione è collegata all'ID, il che significa che un cambiamento
nell'ID

1
Sì, era quello! Ho dimenticato di riavviare il servizio IIS (riga di comando iisreset / restart). Ha funzionato bene dopo quello! Ti preghiamo di aggiornare la tua risposta con queste informazioni e ti darò la risposta accettata.
James McCormack,

Affare fatto. Sono contento che abbia funzionato per te.
jishi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.