Come fa ASP.NET implementazioni maniglia
-
18-09-2019 - |
Domanda
sono stato in grado di leggere fino che ASP.NET rileva le modifiche ai file specifici come i file aspx, DLL e altri solo. Esso si riavvierà automaticamente, terminare le richieste di esercizio in corso e nuove richieste con i nuovi file distribuiti.
Ma ciò che sta accadendo nel tempo dal primo file copiato beeing fino all'ultimo è stato scambiato? Se io scambio il primo file DLL, poi arriva una richiesta, ma gli altri file DLL sono in una versione precedente - sarà semplicemente in crash? Sarà asp.net attendere per qualche secondo e si inizia nuovo solo dopo X secondi di inattività (rilevante) file modifiche?
Thx!
Soluzione
Hai 4 domande qui: Quello che sta accadendo nel tempo dal primo file copiato beeing fino all'ultimo uno è stato scambiato -? C'è un tempo insieme mentre .net aspetta di vedere se tutti gli altri file sono stati modificati prima del suo inizio fino il nuovo dominio app con la nuova DLL del carico.
Se io scambio il primo file DLL, poi arriva una richiesta, ma gli altri file DLL sono in una versione precedente - sarà semplicemente in crash -? Dipende da quale codice cambiamenti sono nella DLL di . Se la nuova DLL può funzionare bene con il vecchio codice di allora andrà bene. Ma se il dominio applicazione gira la nuova DLL e il nuovo dll dipende da qualcosa che non c'è ancora ... allora sì che sarà un'eccezione.
asp.net attendere alcuni secondi e si avvia solo nuovo dopo X secondi di cambiamenti (rilevante) di file -? Sì. Non sono stato in grado di trovare il tempo che il tempo è. Ma nella mia esperienza personale è da qualche parte nel secondo range 1-2.
Ho anche trovato una buona spiegazione qui sul dominio app e ri-caricamento delle DLL: http://odetocode.com/Articles/305.aspx
Se si copia un dll aggiornata in un bin sottodirectory dell'applicazione, il Runtime ASP.NET riconosce c'è nuovo codice da eseguire. Dal momento che ASP.NET non si può scambiare la dll nella esistente AppDomain, inizia un nuovo dominio di applicazione. Il vecchio dominio di applicazione è “fuga fermato”, vale a dire, le richieste esistenti sono autorizzati a terminare l'esecuzione, e una volta che sono tutti rifiniti la AppDomain può scaricare. Il nuovo AppDomain inizia con il nuovo codice e comincia a prendere tutte le nuove richieste.
In genere, quando una DLL carica in un processo, il processo blocca il DLL e Non è possibile sovrascrivere il file su disco. Tuttavia, AppDomain hanno una caratteristica noto come Shadow Copy che permette assemblaggi di rimanere sbloccato e sostituibile sul disco.
Il runtime di ASP.NET con inizializza Shadow Copy abilitato per il bidone directory. Il dominio di applicazione copierà qualsiasi dll di cui ha bisogno dalla directory bin una posizione temporanea prima del bloccaggio e caricamento del DLL in memoria. Shadow Copy permette di sovrascrivere qualsiasi DLL nella directory bin nel corso di una aggiornamento senza prendere il web applicazione offline.