ASP.NET C# - Riciclo di IIS App Pool dal codice di una Web Application

ASP.NET C# - How to Recycle a .NET Web Application's App Pool programmatically

Se lavorate con Web Application pubblicate su server IIS è molto probabile che già sappiate cos'è un Pool di Applicazioni, meglio noto come Application Pool o App Pool: in estrema sintesi, si tratta di un contenitore che consente di isolare una o più applicazioni web configurate su IIS a livello di processi, thread, memoria. In questo modo, se una app va in errore, non comprometterà il funzionamento dell'intero servizio web. La suddivisione logica dei Pool di Applicazioni è molto utile anche per tenere separate applicazioni che richiedono livelli e protocolli di sicurezza differenti.

Per maggiori informazioni sulle App Pool suggerisco di leggere questo articolo sul sito Micorosoft TechNet: per ulteriori informazioni e una serie di esempi pratici consiglio anche questo ottimo articolo sul sito developer.com.

Tra i molti concetti interessanti che è possibile apprendere negli articoli summenzionati, uno dei più importanti è il cosiddetto riciclo: il Pool di Applicazioni può infatti essere "riciclato" periodicamente così da evitare che diventi instabile, provocando crash applicativi, blocchi o consumo eccessivo di memoria. Le impostazioni di riciclo possono essere configurate mediante il pannello Gestione IIS, che consente di impostare varie possibilità: un determinato periodo in minuti, uno o più orari nel corso della giornata, e così via. E' anche possibile riciclare manualmente una App Pool utilizzando il comando Recycle, disponibile sia con click del tasto destro del mouse su una App Pool che nella colonna di comandi a destra del pannello Gestione IIS.

Veniamo ora all'argomento principale di questo post: c'è modo di "riciclare" un Pool di Applicazioni da codice, ovvero da una applicazione? Fortunatamente si, esistono delle apposite librerie di classi ASP.NET che consentono di farlo in modo piuttosto semplice, anche se la nostra è una applicazione web - a patto che l'account che la esegue, anch'esso da configurare a livello di Application Pool , disponga dei permessi necessari (extended permissions). E' addirittura possibile farlo da una applicazione web associata all'App Pool che vogliamo riciclare!

Ecco una funzione che consente di ottenere questo risultato:

Il codice di cui sopra è una versione modificata del metodo descritto in questo thread su StackOverflow: le modifiche che ho effettuato consentono di riciclare qualsiasi Application Pool associata al sito indicato come parametro: in assenza di tale informazione, verrà riciclato il Pool associato al sito che ha disposto la chiamata.

Come suggerito dai commenti al codice, è necessario aggiungere un riferimento ai namespace Microsoft.Web.Administration e System.Web.Hosting. Per far questo, è necessario utilizzare il comando Add Reference... di Visual Studio e aggiungere al nostro progetto l'assembly Microsoft.Web.Administration:

ASP.NET C# - Riciclo di IIS App Pool dal codice di una Web Application

Per il momento è tutto: felice riciclo!

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


The reCAPTCHA verification period has expired. Please reload the page.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.