Las ventajas que te ofrece Microsoft Azure y el mundo.NET

Azure WebJobs | Actualizando datos en background

En el artículo anterior expuse las bondades que nos ofrece este servicio de Azure Web Jobs así como la versatilidad a la hora de poder realizar tareas muy diversas que extiendan la funcionalidad de nuestros sitios consiguiendo que no sean sólo páginas web de contenido sino que alcancen la excelencia de las aplicaciones web pudiendo tratar la información y realizando tareas automatizadas.

webjobs-poster

En esta ocasión veremos un ejemplo práctico de aplicación de un WebJob para procesar información de un sitio web que muestra datos extraídos de Open Data Canarias, en concreto de las playas de la isla de Tenerife.

Como se puede observar en el enlace de la fuente de datos, podemos obtener la información en CSV, JSON y XML pero, entre todos los campos hay algunos que pueden variar en cortos espacios de tiempo y, además, no disponemos de foto de las mismas, algo que se podría considerar esencial. Por lo tanto, el objetivo del WebJob será el de almacenar los datos obtenidos de la fuente de datos en un Table Storage de Azure y además, le pondrá la URL de una imagen sacada de una búsqueda de Bing en un campo destinado a ello.

Desgranando el WebJob

El WebJob que usaremos será un sencillo proyecto de consola que se conectará a la fuente de los datos para obtener los elementos actuales y, posteriormente hará lo propio a una cuenta de Azure Storage donde se guardarán los mismos junto con la imagen obtenida del servicio de Bing.

webjob-structure

class Program
{

    public static string StorageConnectionString { getset; }
    static void Main(string[] args)
    {
        StorageConnectionString = «DefaultEndpointsProtocol=https;AccountName=tenerifebeachsstorage;AccountKey=gtGWx+8u2p1SWDHNNDGt+Bx3ar09klj83wPP0VIOQA6FasOawSCnLcTdYg6EkImfjc4EZwBZXCWOqnaTXnOBhw==»;        var beachs = GetBeachs();
        SaveBeachs(beachs);
    }    private static List<BeachJson> GetBeachs()
    {
        var dataService = new BeachService();
        var data = dataService.Get();
        return data;
    }

    private static void SaveBeachs(List<BeachJson> beachs)
    {
        var storageService = new BeachStorageService(StorageConnectionString);
        storageService.SaveList(beachs);
    }
}

Para abstraer el código que obtiene y guarda los elementos, he creado una clase/servicio en otro proyecto para que pueda ser reutilizable por otros elementos de mi solución o incluso expuesto al exterior por Api REST desde Web Api.

Lo más reseñable de este servicio, es el método para guardar los elementos. Como es posible que haya nuevos elementos o que se eliminen algunos de los existentes, la idea es eliminar los datos de TableStorage (29 registros) y volver a cargarlos con la imagen correspondiente.

public bool SaveList(List<BeachJson> list)
{
    try
    {

        TruncateTable();
        foreach (var item in list)
        {
            var beach = new Beach(item);
            beach.Picture = GetPictureUrl(«Tenerife « + item.Title + » « +item.County);
            TableOperation insertOperation = TableOperation.Insert(beach);
            this.Context.Execute(insertOperation);
        }
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

Asociando el WebJob al sitio web

Como vimos en el artículo anterior, hay varias formas de publicar el WebJob asociado al sitio web. En esta ocasión lo haré desde Visual Studio, asociando el proyecto de consola que ejecuta las tareas de actualización al proyecto MVC 4.5 que se corresponde con el WebSite.

webjob-associate webjob-publish

Como se puede ver, el WebJob se ejecutará de forma periódica una vez al día, a las 12.00 AM (00:00), de esta forma, intentaremos minimizar el impacto causado a nuestros visitants, aunque habría que analizar cuándo tenemos menos visitas en nuestro WebSite para establecer la hora adecuada de ejecución.

Publicando el Web Site

Una vez asociado el WebJob, procedemos a publicar el WebSite desde Visual Studio y tras hacerlo, podremos comprobar cómo nos aparece el WebJob publicado en el nodo correspondiente del navegador de Servidor.

webjob-published

Viendo los resultados

Una vez tenemos todo publicado, podemos navegar la WebSite para comprobar si todo ha funcionado correctamente (como así esperamos).

website-home

Una vez estamos en la portada, navegando a la opción “Playas” aparecerá un listado con las playas obtenidas desde Table Storage, con la imagen obtenida desde el servicio de Bing, además de mostrarlas en el mapa.

website-beachs

Conclusión

Como hemos podido comprobar, operaciones para extender nuestros sitios web, que en el pasado debíamos hacer con un Cloud Service, con el consiguiente aumento de coste mensual, podemos realizarla ahora dentro del contexto de un Web Site despreocupándonos un poco del coste porque se usa el procesamiento de este mismo.

 

mm

Sobre Santiago Porras Rodríguez

Innovation Team Leader at ENCAMINA | MVP in Developer Technologies. Apasionado por las nuevas tecnologías. Colaboro con la comunidad de desarrolladores escribiendo artículos en mi blog personal y ocasionalmente en CompartiMOSS.com. Además, soy uno de los coordinadores de TenerifeDev, grupo de usuarios de .NET de Tenerife y de otros grupos como Comunidad Office 365. Puedes encontrarme en la red microparticipando en Twitter con el usuario @saintwukong
Esta entrada ha sido publicada en Azure App Services, Azure Web Sites, Azure WebJobs, Azure WebSites, Microsoft Azure, Sin categoría y etiquetada como , , , . Enlace permanente .
Suscríbete a Piensa en Sofware desarrolla en Colores

Suscríbete a Piensa en Sofware desarrolla en Colores

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores