2011-06-28 15 views
8

Sto eseguendo il debug di un'applicazione ASP.NET che sembra aver perso in modo casuale il contenuto di alcuni campi statici. Ho fatto alcune semplici registrazioni personalizzate (perché anche log4net era instabile) e ho scoperto che l'applicazione veniva caricata in due domini di app. Ecco un frammento dal registro:Un'app ASP.NET (accidentalmente) in più domini di app o frequente riciclo di app

6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 1 
6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 2 
6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 3 
6/27/2011 9:01:01 PM /LM/W3SVC/1/ROOT/MyApp-1-129537072581658334: log message 4 
6/27/2011 9:01:02 PM /LM/W3SVC/1/ROOT/MyApp-4-129537072620628334: log message 5 <- 
6/27/2011 9:01:02 PM /LM/W3SVC/1/ROOT/MyApp-4-129537072620628334: log message 6 
6/27/2011 9:04:50 PM /LM/W3SVC/1/ROOT/MyApp-1-129537074647228334: log message 7 
6/27/2011 9:04:50 PM /LM/W3SVC/1/ROOT/MyApp-1-129537074647228334: log message 8 

La voce dopo l'ora/data è il nome di dominio applicazione corrente.

L'applicazione è solo una normale applicazione ASP.NET (non MVC) che gestisce alcune richieste AJAX e le passa ad un gruppo di librerie ASP.NET. L'unica cosa insolita è che una delle librerie usa un po 'di riflessione per cercare alcune classi che poi le istanzia e le esegue su thread separati. Ma non fa nulla esplicitamente con i domini delle app.

A proposito, la riga evidenziata dal file di registro proviene dall'app ASP.NET stessa (ad esempio, non da uno di questi thread separati) da un gestore ASPX.

Sto interpretando correttamente il registro? In tal caso, cosa può causare il caricamento e la distribuzione di un'applicazione da più domini dell'app?

Edit: questa domanda è essenzialmente legato a questo: ASP.NET Application state vs a Static object. Tuttavia, sulla base di ciò che ho visto oggi, non sembra possibile fare affidamento su campi statici. Potrei spostare tutto sull'oggetto Application, ma suppongo che una sincronizzazione sia un po 'macchinosa. Sono sempre più convinto che l'applicazione faccia qualcosa di non standard.

Modifica 2: Ho fatto un po 'più di indagine, e sembra che ci sia sempre una relazione 1-1 tra domini di applicazioni e app (che è qualcosa che mi aspetterei). Quindi penso che quello che sto vedendo è il riciclaggio.

Edit 3: Dopo alcuni altri esperimenti e rovistando, mi hanno permesso di monitoraggio della salute IIS (sulla base di http://blogs.msdn.com/b/tess/archive/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles.aspx), e abbiamo scoperto che l'applicazione viene avviata due volte in una rapida successione. È tutto abbastanza sconcertante. Ecco gli eventi del registro:

Event code: 1003 
Event message: Application compilation is starting. 
Event time: 6/28/2011 8:34:31 AM 
Event time (UTC): 6/28/2011 3:34:31 PM 
Event ID: d42336b18c264516a4ba5aa1e62df276 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT/MyApp-1-129537488697736549 
    Trust level: Full 
    Application Virtual Path: /MyApp 
    Application Path: [snip]\MyApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

---- 

Event code: 1001 
Event message: Application is starting. 
Event time: 6/28/2011 8:34:33 AM 
Event time (UTC): 6/28/2011 3:34:33 PM 
Event ID: f7fbecb1ba1a4a24833016cec47458c6 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT-2-129537488729428362 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: [snip]\RootApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

---- 

Event code: 1001 
Event message: Application is starting. 
Event time: 6/28/2011 8:34:40 AM 
Event time (UTC): 6/28/2011 3:34:40 PM 
Event ID: 07a3dc31e8804caca1ddc3b2101962e3 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT-3-129537488807712839 
    Trust level: Full 
    Application Virtual Path:/
    Application Path: [snip]\RootApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

---- 

Event code: 1001 
Event message: Application is starting. 
Event time: 6/28/2011 8:34:40 AM 
Event time (UTC): 6/28/2011 3:34:40 PM 
Event ID: db304b519a084fa797fbcfe66fbb0b48 
Event sequence: 1 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/1/ROOT/MyApp-4-129537488808502885 
    Trust level: Full 
    Application Virtual Path: /MyApp 
    Application Path: [snip]\MyApp\ 
    Machine name: US-SEA-R9759B2 

Process information: 
    Process ID: 7624 
    Process name: w3wp.exe 
    Account name: IIS APPPOOL\DefaultAppPool 

L'applicazione MyApp si trova in un'altra applicazione (RootApp). Quello che mi aspetterei sarebbero due messaggi di log: MyApp starting e RootApp starting.

risposta

1

Se dovessi indovinare c'è qualcosa sul tuo sito che sta cambiando i file web.config, dlls, aspx, asmx o qualche altro file. Ogni volta che questi file vengono modificati, viene avviata una nuova istanza dell'applicazione Web e vengono fornite nuove richieste da quella nuova applicazione Web mentre le vecchie richieste vengono pubblicate dall'applicazione esistente. Una volta che tutte le vecchie richieste completano la vecchia applicazione viene chiusa. Ciò è positivo per le distribuzioni in quanto non rompe le sessioni esistenti delle persone, ma significa che non dovresti avere nulla che cambi automaticamente i file web.config su ogni richiesta o cose del genere.

questa pagina si descrivono in dettaglio molto meglio come funziona http://technet.microsoft.com/en-us/library/cc759560(WS.10).aspx

2

Si è impostata per errore il numero di processi di lavoro in Proprietà AppPool (Tab Performance) a 2?

In tali proprietà, ci potrebbe anche essere un'impostazione che diamo i tuoi AppPool riciclano troppo spesso, in base al numero o delle domande o di una qualsiasi di queste impostazioni riciclaggio

Problemi correlati