Idle timeout in IIS e Azure

Come era facilmente intuibile da uno dei miei ultimi post, ultimamente sto lavorando ad un’applicazione “hostata” su Windows Azure. Oltre ai “problemi” di continuous deployment descritti qui, ho riscontrato un altro piccolo problema riguardante la configurazione di IIS.
IIS ha un’interessante configurazione (idle timeout) nata allo scopo di ridurre al minimo le risorse utilizzate dalle applicazioni web; tale configurazione consiste nello “spegnere” un sito web, nel caso non vi siano richieste da parte di utenti per un tempo di 20 minuti.

Questo valore è ovviamente configurabile dalla console di IIS e lo si può ridurre, aumentare o addirittura disabilitare. Nel caso ci si trovi nell’ambito di un’installazione locale, è sufficiente cambiare la configurazione dell’application pool che “hosterà” il nostro sito web.

Ma se ci si trova in Windows Azure?

In Azure non è possibile accedere in terminal server alla macchina contenente il nostro sito e cambiare l’Idle Timeout. Esiste però un escamotage che abilita tale accesso al server sul cloud; tale “hack” risulterebbe in ogni caso inutile, in quanto al riavvio della macchina virtuale (ma anche alla creazione di una nuova istanza) sarebbe necessario reimpostare di nuovo il valore, obbligandoci così a collegarci nuovamente in terminal server.

Fortunatamente all’interno del package di Azure possiamo definire dei task di avvio, che verranno eseguiti ad ogni riavvio della macchina virtuale (o alla creazione di una nuova istanza). All’interno di questi task possiamo eseguire applicazioni, comandi DOS e quant’altro possa servirci per far funzionare la nostra applicazione.

In questo post Steve Marx spiega come eseguire dei task e, proprio in questo esempio, mostra come cambiare il timeout di default di IIS.

Per prima cosa è necessario modificare il file ServiceDefinition.csdef ed inserire il seguente codice:

<Startup>
    <Task commandLine="Tasks\startup.cmd" executionContext="elevated" taskType="simple" />
</Startup>

Per questo esempio il task type sarà di tipo simple, ma in un futuro post vedremo le differenti tipologie ed eventuali scenari di utilizzo.

Da qui in poi è sufficiente creare un file .cmd con all’interno il comando DOS per per disabilitare il timeout di IIS, come mostrato di seguito.

%windir%\system32\inetsrv\appcmd set config -section:applicationPools
    -applicationPoolDefaults.processModel.idleTimeout:00:00:00

A questo punto l’applicazione hostata in Azure sarà sempre reattiva, anche in caso di poco traffico (molto comodo in fase di testing).
Ciauz


Comments