Como crear un Azure WebJob con ejecucion continua

Primero que todo, que es un Azure Web Job, asi como en Azure podemos desplegar sitios web, tambien podemos desplegar aplicaciones que no tienen una interfaz, algo como un servicio windows pero en la nube, simplemente las podemos llamar tareas de fondo (background tasks), este tipo de aplicaciones son cada vez mas populares cuando tenemos que procesar datos que no son en linea, por ejemplo si tienes que procesar mensajes de una MessageQueue o de un IOT Hub, entonces un Azure WebJob es la solucion perfecta.

Entonces para este fin estos son los pasos a seguir:

1. Crear aplicacion en Visual Studio como tipo WebJob

2. Instalar paquete de nuget de azure webjobs sdk
Install-Package Microsoft.Azure.WebJobs -Version 1.1.2  
3. Instalar paquete de nuget para extensiones
Install-Package Microsoft.Azure.WebJobs.Extensions  
4. Agregar la siguiente clase

Las extensiones de Azure lo que haces es enlazar ciertos eventos que ocurren en diferentes servicios, como por ejemplo, cuando llega un mensaje a una cola de azure, o cuando se sube un archivo al Azure Storage, o cada que pasa 1 segundo, minuto hora, el ejemplo abajo utiliza el Trigger del tiempo, y utiliza sentencia de cronjobs, este ejemplo se ejecuta cada segundo, y cada segundo podemos hacer nuestra logica de negocio.

 public static class TimerSamples
    {
        /// <summary>
        /// Example job triggered by an crontab schedule that is also configured
        /// to run immediately on startup.
        /// </summary>
        public static void StartupJob([TimerTrigger("*/1 * * * * *", RunOnStartup = true, UseMonitor = true)] TimerInfo timerInfo)
        {
            Console.WriteLine("Timer job fired!" +  DateTime.Now.ToShortTimeString());
        }
    }

En el web.config debemos agregar el string de conexion de una cuenta de almacenamiento

  <add name="AzureWebJobsDashboard" connectionString="DefaultEndpointsProtocol=https;AccountName=xyz;AccountKey=YZTX61DxLITddJS8peHIj0+LUvN4IFQ/6sy9hBcX7y5KMHyWf3lVDctjYYHMKngnNZj1PvTKnQClyoh0Q9mT6A==" />
    <add name="AzureWebJobsStorage" connectionString="DefaultEndpointsProtocol=https;AccountName=xyz;AccountKey=YZTX61DxLITddJS8peHIj0+LUvN4IFQ/6sy9hBcX7y5KMHyWf3lVDctjYYHMKngnNZj1PvTKnQClyoh0Q9mT6A==" />

Con F5, revisemos que todo funciona localmente:

5. Desplegar a Azure

Para desplegar a Azure simplemente le damos clic derecho sobre el proyecto, publicar como un proyecto Azure WebJob

6. Configuracion del Job

En esta pantalla podemos configurar el job como continuo, o podemos programarlo segun fechas y horas, en nuestro caso queremos que se ejecute continuamente, ya que la idea es que este programa posiblemente este leyendo mensajes de una cola, o procesando archivos en linea.

7. Conectarse al Sitio Web Azure

Azure Webjobs como tal no es un recurso especifico de Azure, los WebJobs se instalan dentro de un sitio web o App, por lo tanto en las siguientes pantallas se escoge la App donde se desee instalar.

8. Verificacion

Ahora debemos verificar que el webjob se esta ejecutando en la nube.
Para esto ingresamos a la siguiente url:
https://.scm.azurewebsites.net/

En Tools, Webjobs Dashboard, Seleccionamos el Job, y Start Profiling

En este punto vamos a ver un error, ya que el string de conexion del AzureWebJobsDashboard no esta configurado en la nube, lo tenemos en nuestro app.config, pero como al desplegar el job se instala en un sitio web, debemos configurar estas entradas en nuestro sitio web, de nuevo en el dashboard del webjob, podemos ver como el job se ejecuta satisfactoriamente.