IIS 7.5 - Disabilitare la proprietà Riciclo sovrapposto non rispettata quando si aggiorna web.config


25

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 Recycleproprietà 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 Changesproprietà impostata su Falsecome 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 startviene chiamato il nuovo evento del processo di lavoro prima che il processo del vecchio lavoratore sia terminato, allora l' endevento di processo del vecchio lavoratore non viene mai chiamato - Non avviene in sequenza, non accade mai.


Quanto tempo dopo l'aggiornamento di web.config prima dell'avvio del nuovo processo di lavoro?
Greg Askew

Il nuovo processo di lavoro inizia non appena provo ad accedere al sito dopo un riciclo - Quindi meno di un secondo se sono veloce. Se lasciato, l'evento 'shutdown' del vecchio processo di processo ha luogo 20-30 secondi dopo il riciclo.
Giovanni

Ho lo stesso problema. C'è sovrapposizione
Andrew Rimmer,

11
La modifica del file web.config provoca il ricaricamento di appDomain. AppDomain è separato dall'AppPool. Non dovresti vedere un nuovo ID di processo W3WP solo cambiando web.config. Vedi qui treeloop.com/blog/iis-application-domain-and-pool-recycling
tenuto il

1
@kheld ha assolutamente ragione (forse aggiungilo come risposta) questa non è una sovrapposizione di appool, è una sovrapposizione di AppDomain. Non credo che tu possa fermarlo, ma puoi disabilitare il riciclaggio del dominio delle app in caso di modifica.
Sam Cogan,

Risposte:


1

Da questo post MSDN: https://blogs.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-recycles/

Pertanto, come parte del processo di distribuzione del codice, sembra che il pool verrà riciclato quando si distribuisce una di queste modifiche:

Riciclo immediato

  • Modifiche Web.config
  • Modifiche Machine.config
  • Modifiche Global.asax
  • Cambia directory bin
  • App_Code cambia

( preso in prestito da: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

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.