Ho un sito che detiene un blocco esclusivo di alcune risorse. Ho usato gli eventi .NET Application_Start e Application_End per acquisire e rilasciare il blocco su queste risorse al momento opportuno. Affinché ciò funzioni correttamente, può esserci solo un'istanza della mia applicazione in esecuzione in un dato momento.
Per far sì che ciò accada, ho impostato la Disable Overlapped Recycle
proprietà nel pool di applicazioni su True
. Si suppone che questa proprietà assicuri che il vecchio processo di lavoro venga chiuso completamente prima che ne venga avviato uno nuovo ogni volta che il pool di app viene riciclato. Funziona bene ogni volta che il pool di app viene riciclato manualmente tramite IIS, automaticamente a seguito del raggiungimento del timeout di inattività o automaticamente in base a regole specifiche relative all'intervallo di tempo / tempo.
Tuttavia, quando web.config per il sito viene aggiornato, questa regola non viene applicata: un nuovo processo di lavoro viene avviato prima che quello vecchio termini di chiudersi. Questo fa succedere cose brutte. Ho la Disable Recycling for Configuration Changes
proprietà impostata su False
come voglio che il pool di app venga riciclato quando viene aggiornato web.config - questo accade spesso durante lo sviluppo.
È qualcosa che ci si aspetta o è un bug in IIS? È la mia unica opzione da configurare in modo che la modifica di web.config non ricicli il pool di app? Preferirei non farlo, poiché sono abbastanza sicuro che causerà molti mal di testa alle persone che cambiano la configurazione e poi dimenticano di riciclare il pool di app.
Aggiornare:
Per essere più chiari, quando start
viene chiamato il nuovo evento del processo di lavoro prima che il processo del vecchio lavoratore sia terminato, allora l' end
evento di processo del vecchio lavoratore non viene mai chiamato - Non avviene in sequenza, non accade mai.