Recuperar la configuración de IIS con Microsoft.Web.Administration

En el post de ayer estuve hablando sobre la configuración de la sección Recycling en Windows Azure Web sites, gracias al apartado monitoring que el equipo del servicio ha puesto a nuestra disposición. A raíz de ello, Sergio León preguntaba si sabía cúando se reciclaba el application pool en Windows Azure Web sites, por lo que empecé a trastear 🙂

Como en Windows Azure Web Sites no tenemos acceso a la máquina virtual que sirve nuestro sitio, podemos optar por el plan B: Utilizar Microsoft.Web.Administration para conseguir la información que necesitamos. Existe documentación oficial al respecto, pero en este caso vamos un poco a ciegas en cuanto a qué nombre podría tener el sitio, los application pools, etcétera.

Para conseguir la información que necesito he implementado lo siguiente:

using System.Web.Mvc;
using Microsoft.Web.Administration;

namespace AutoHealingWAWebSites.Controllers
{
    public class TestController : Controller
    {
        //
        // GET: /Home/
        public ActionResult Index()
        {
            var serverManager = new ServerManager();

            ViewBag.Sites = serverManager.Sites;
            return View(serverManager.ApplicationPools);
        }

    }
}

En el controlador, estoy haciendo uso del objeto ServerManager de Microsoft.Web.Administration para recuperar todos los sitios que están configurados. Por otro lado, utilizaré como modelo de mi vista la propiedad ApplicationPools, lo cual me devuelve un ApplicationPoolCollection con todos los application pools disponibles.

En el lado de la vista, lo único que hago es acceder a las propiedades que me interesan dentro de la configuración:

@using Microsoft.Web.Administration
@model ApplicationPoolCollection
@{
    ViewBag.Title = "Index";
}

<h2>IIS Configuration</h2>
<ul>
    @foreach (Site site in ViewBag.Sites)
    {
        <li>
            <strong>@site.Name application pool</strong>: @site.ApplicationDefaults.ApplicationPoolName
        </li>
    }
</ul>
<h2>Application Pools Recycling configurations</h2>
<ul>
    @foreach (ApplicationPool appPool in Model)
    {
        <li>@appPool.Name Attributes
            <ul>
                <li><strong>LogEventOnRecycle</strong>: @appPool.Recycling.LogEventOnRecycle</li>
                <li><strong>Periodic Restart Time</strong>: @appPool.Recycling.PeriodicRestart.Time.Days days @appPool.Recycling.PeriodicRestart.Time.Hours hours @appPool.Recycling.PeriodicRestart.Time.Minutes minutes @appPool.Recycling.PeriodicRestart.Time.Seconds seconds</li>
                <li><strong>Periodic Restart Request</strong>: @appPool.Recycling.PeriodicRestart.Requests</li>
                <li><strong>Periodic Restart PrivateMemory</strong>: @appPool.Recycling.PeriodicRestart.PrivateMemory</li>
                <li><strong>Periodic Restart Schedules</strong>: @appPool.Recycling.PeriodicRestart.Schedule.Count</li>
                <li><strong>Periodic Restart Memory:</strong>: @appPool.Recycling.PeriodicRestart.Memory</li>
            </ul>
        </li>
    }
</ul>

Como se puede ver en el código anterior, listo todos los sitios dentro del servidor web de Windows Azure Web sites y el application pool. Como quiero conocer la configuración de todos los application pools existentes, recorro las propiedades relativas a Recycling para toda la colección.

IIS Configuration Windows Azure Web sites

Como podemos ver, el único parámetro configurado es cada cuánto tiempo se reinicia el pool: 1 days 5 hours 0 minutes 0 seconds por defecto en todos ellos.

En este post he utilizado esta librería para descubrir una configuración concreta en este hosting en Windows Azure, pero podemos hacer uso de la misma para cualquier entorno donde no tengamos acceso al servidor IIS web para comprobarlo.

Espero que sea de utilidad.

¡Saludos!