Esistono diversi modi per gestire ciò che stai chiedendo e alcuni aspetti diversi della tua domanda:
Gestisci piccoli aggiornamenti per le promozioni
Quello che stai veramente cercando qui è un sistema di gestione dei contenuti o simile che ti permetta di modificare il contenuto al volo (pensa Wordpress / Drupal o da un punto di vista .NET N2 CMS, Umbraco, Orchard, ecc.), Tuttavia lì sono alcune cose che potresti provare se non hai seguito quella strada.
Perché ASP.NET si ricarica davvero solo se si toccano determinati tipi di file (web.config (s), principalmente il contenuto delle cartelle /bin/
e /app_code/
) - e ha un limite configurabile per "altre modifiche ai file" (in pratica una volta modificato molti file all'interno del tuo sito verranno riavviati dal pool di applicazioni - NumRecompilesBeforeAppRestart
) potresti provare a fare qualcosa in cui controlli una cartella diversa per alcuni file statici (ad es. .html
) che tiri dentro e visualizzi come necessario, o usi il LoadControl
metodo che prende un percorso di stringa a un .ascx
controllo utente e lo carica in modo dinamico - come determinare quale mostrare è una domanda diversa più adatta a StackOverflow - tuttavia consiglierei una soluzione basata sulla convenzione di denominazione.
Puoi anche cercare di utilizzare qualcosa come Managed Extensibility Framework (MEF - che è parte integrante del framework .NET dalla versione 4) che ti consente di scrivere un'architettura basata su plug-in e specificare una cartella esterna /bin/
alla directory per cui monitorare nuovi .DLL - anche se non ho provato questo per vedere se eviterà il problema di riavvio dell'app, l'ho usato con buoni risultati in un ambiente web per aggiungere funzionalità comuni a un sito.
Se ciò non fa appello, l'unica altra opzione a cui riesco a pensare sarebbe quella di aggiungere i controlli come "code-in-front" come facevamo nel classico ASP - cioè con un <script runat="server">
blocco anziché una classe "code-behind" compilata che contiene la logica per eseguire il controllo - questo rimuoverà la necessità di una modifica della DLL, a scapito di una perdita di prestazioni per la prima volta quando il controllo viene compilato al volo - di nuovo dovrai bilanciarlo con il NumRecompilesBeforeAppRestart
se tu stai facendo molti piccoli cambiamenti.
Come persisto sessioni tra i riavvi delle app?
Questo è probabilmente un problema più semplice da risolvere e prevede tre passaggi chiave:
- Configura MachineKey (IIS7, ma vale ancora per 8) in modo che sia un valore costante anziché
AutoGenerate
- ciò significa che quando AppPool ricicla utilizzerà la stessa chiave e sarà quindi in grado di decrittografare i cookie di sessione, viewstate, ecc. Da prima il riciclo.
- O impostare un server di stato o di configurare un database per tenere stato sessione .
- Passa dall'uso
InProc
a StateServer
o SQLServer
nell'elemento SessionState nel tuo web.config.
In questo modo avrai sessioni persistenti che sopravvivranno al riavvio dell'app. Tuttavia, questi non sono "gratuiti": tutto ciò che memorizzi nella sessione ora deve essere serializzabile e subirai un leggero calo delle prestazioni poiché ogni caricamento della pagina richiederà ora ulteriori viaggi di rete per ottenere e potenzialmente rilasciare i dati della sessione.
Tuttavia, se ti trovi in una posizione in cui sono necessari "diversi minuti" per il riavvio dell'applicazione dopo una distribuzione, ti consigliamo di passare a un ambiente con bilanciamento del carico o almeno a una configurazione di gestione temporanea / live sostituibile a caldo (come quello fornito da Azure / AWS / ecc.) - in questo modo puoi portare un server offline mentre lo aggiorni o lo prepari con il nuovo codice e poi lo cambi - a condizione che tu abbia preso le misure per affrontare la condivisione sessioni (vedi sopra) funzionerà bene senza alcun impatto per i tuoi utenti.