Desarrollo e implementación de WebJobs mediante Visual Studio

En este artículo, se explica cómo usar Visual Studio para implementar un proyecto de aplicación de consola en una aplicación web de App Service como WebJob de Azure. Para información sobre cómo implementar WebJobs con Azure Portal, consulte Ejecución de tareas en segundo plano con WebJobs en Azure App Service.

Puede elegir desarrollar un WebJob que se ejecute como una aplicación .NET Core o una aplicación .NET Framework. La versión 3.x del SDK de Azure WebJobs permite implementar trabajos web que se ejecutan como aplicaciones de .NET Core o como aplicaciones de .NET Framework, mientras que la versión 2.x solo es compatible con .NET Framework. El modo en que se implementa un proyecto de WebJobs es diferente según sea un proyecto de .NET Core o un proyecto de .NET Framework.

Puede publicar varios WebJobs en una sola aplicación web, siempre que cada WebJob de una aplicación web tenga un nombre único.

Trabajos web como aplicaciones de consola de .NET

Con la versión 3.x del SDK de Azure WebJobs, puede crear y publicar WebJobs como aplicaciones de consola de .NET Core. Puede encontrar instrucciones paso a paso para crear y publicar una aplicación de consola de .NET Core en Azure como un WebJob en Introducción al SDK de Azure WebJobs para el procesamiento en segundo plano basado en eventos.

Nota

Las aplicaciones web de .NET Core o los trabajos web de .NET Core no se pueden vincular con proyectos web. Si necesita implementar el WebJob con una aplicación web, debe crearlo como una aplicación de consola de .NET Framework.

Implementación en Azure App Service

Para publicar un WebJob de .NET Core en Azure App Service desde Visual Studio, se utilizan las mismas herramientas que para publicar una aplicación de ASP.NET Core.

  1. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Publicar.

  2. En el cuadro de diálogo Publicar, seleccione Azure en Destino y, luego, Siguiente.

  3. Seleccione Azure WebJobs en Specific target (Destino específico) y, luego, elija Siguiente.

  4. Por encima de Instancias de App Service seleccione el botón más ( + ) para Create a new Azure WebJob (Crear una instancia de Azure WebJob).

  5. En el cuadro de diálogo App Service (Windows) , use la configuración de hospedaje de la tabla siguiente.

    Configuración Valor sugerido Description
    Nombre Nombre único globalmente Nombre que identifica de forma única la nueva aplicación de función.
    Suscripción Elija una suscripción La suscripción de Azure que se va a usar.
    Grupo de recursos myResourceGroup Nombre del grupo de recursos en el que se va a crear la instancia de Function App. Elija Nuevo para crear un grupo de recursos nuevo.
    Plan de hospedaje Plan de App Service Un plan de App Service especifica la ubicación, el tamaño y las características de la granja de servidores web que hospeda la aplicación. Para ahorrar dinero cuando hospede varias aplicaciones, configure las aplicaciones web para que compartan un único plan de App Service. Los planes de App Service definen la región, el tamaño de la instancia, el recuento de escala y la SKU (gratis, compartida, básica, estándar o premium). Seleccione Nuevo para crear un plan de App Service. Los niveles Gratis y Básico no admiten la opción Siempre disponible para mantener el sitio en ejecución continua.

    Create App Service dialog box

  6. Seleccione Crear para crear un WebJobs y los recursos relacionados en Azure con esta configuración e implementar el código del proyecto.

  7. Seleccione Finalizar para volver a la página Publicar.

Trabajos web como aplicaciones de consola de .NET Framework

Si usa Visual Studio para implementar un proyecto de aplicación de consola de .NET Framework habilitado para WebJobs, los archivos del entorno de ejecución se copian en la carpeta apropiada de la aplicación web (App_Data/jobs/continuous para WebJobs continuos y App_Data/jobs/triggered para WebJobs programados o a petición).

Visual Studio agrega los siguientes elementos a los proyectos habilitados para WebJobs:

Diagram showing what's added to a console app to enable deployment as a WebJob

Puede agregar estos elementos a un proyecto de aplicación de consola existente o usar una plantilla para crear un nuevo proyecto de aplicación de consola con funcionalidad WebJobs.

Implemente un proyecto como un WebJob por sí mismo o vincúlelo a un proyecto web que se implemente automáticamente siempre que implemente el proyecto web. Para vincular proyectos, Visual Studio incluye el nombre del proyecto con funcionalidad WebJob en un archivo webjobs-list.json en el proyecto web.

Diagram showing WebJob project linking to web project

Requisitos previos

Instale Visual Studio 2022 con la carga de trabajo de desarrollo de Azure.

Habilitación de la implementación de WebJobs para un proyecto de aplicación de consola existente

Tiene dos opciones:

  • Activación de la implementación automática con un proyecto web.

    Configure un proyecto de aplicación de consola existente de forma que se implemente automáticamente como un WebJob cuando se implemente un proyecto web. Utilice esta opción cuando desee ejecutar su trabajo web en la misma aplicación web en la que ejecuta la aplicación web relacionada.

  • Activación de la implementación sin un proyecto web.

    Configure un proyecto de aplicación de consola existente para implementarlo como un WebJob por sí solo, sin vínculo a un proyecto web. Use esta opción cuando desee ejecutar un trabajo web en una aplicación web por sí mismo, sin ninguna aplicación web ejecutándose en dicha aplicación web. Puede que quiera hacerlo para escalar los recursos del WebJob de forma independiente de los recursos de la aplicación web.

  1. Haga clic con el botón derecho en el proyecto web en el Explorador de soluciones y, luego, seleccione Agregar>Proyecto existente como WebJob de Azure.

    Existing Project as Azure WebJob

    Aparecerá el cuadro de diálogo Agregar WebJob de Azure .

  2. En la lista desplegable Nombre de proyecto, seleccione el proyecto de aplicación de consola para agregar como WebJob.

    Selecting project in Add Azure WebJob dialog box

  3. Complete el cuadro de diálogo Agregar Azure WebJob y haga clic en Aceptar.

  1. Haga clic con el botón derecho en el proyecto de aplicación de consola en el Explorador de soluciones y, luego, seleccione Publicar como WebJob de Azure.

    Publish as Azure WebJob

    Aparecerá el cuadro de diálogo Agregar WebJob de Azure , con el proyecto seleccionado en el cuadro Nombre de proyecto .

  2. Complete el cuadro de diálogo Agregar Azure WebJob y haga clic en Aceptar.

    Aparece el asistente de Publicación web . Si no quiere realizar la publicación inmediatamente, cierre el asistente. La configuración que ha escrito se guarda para cuando desee implementar el proyecto.

Creación de un nuevo proyecto con funcionalidad WebJobs

Para crear un proyecto habilitado para WebJobs, use la plantilla de proyecto de aplicación de consola y habilite la implementación de WebJobs tal y como se explicó en la sección anterior. Como alternativa, puede usar la plantilla para nuevos proyectos WebJobs:

Nota

La plantilla new-project de WebJobs instala automáticamente los paquetes NuGet e incluye código en Program.cs para el SDK de WebJobs. Si no quiere usar el SDK de WebJobs, quite o cambie la instrucción host.RunAndBlock en Program.cs.

  1. Seleccione File (Archivo)>New (Nuevo)>Project (Proyecto) . En el cuadro de diálogo Crear un proyecto nuevo, busque y seleccione Azure WebJob (.NET Framework) para C#.

  2. Siga las instrucciones anteriores para convertir el proyecto de aplicación de consola en un proyecto de WebJobs independiente.

  1. Haga clic con el botón derecho en el proyecto web en el Explorador de soluciones y, luego, seleccione Agregar>Nuevo proyecto WebJob de Azure.

    New Azure WebJob Project menu entry

    Aparecerá el cuadro de diálogo Agregar WebJob de Azure .

  2. Complete el cuadro de diálogo Agregar Azure WebJob y haga clic en Aceptar.

Archivo webjob-publish-settings.json

Cuando se configura una aplicación de consola para la implementación de WebJobs, Visual Studio instala el paquete de NuGet Microsoft.Web.WebJobs.Publish y almacena la información de programación en un archivo webjob-publish-settings.json en la carpeta Propiedades del proyecto de WebJobs. A continuación se muestra un ejemplo de ese archivo:

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "WebJob1",
  "startTime": "null",
  "endTime": "null",
  "jobRecurrenceFrequency": "null",
  "interval": null,
  "runMode": "Continuous"
}

Puede editar este archivo directamente y Visual Studio proporciona IntelliSense. El archivo de esquema se almacena en https://schemastore.org y se puede ver allí.

Archivo webjobs-list.json

Cuando vincule un proyecto con funcionalidad WebJobs a un proyecto web, Visual Studio almacenará el nombre del proyecto WebJobs en un archivo webjobs-list.json en la carpeta Properties del proyecto web. La lista puede contener varios proyectos de WebJobs, tal y como se muestra en el siguiente ejemplo:

{
  "$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
  "WebJobs": [
    {
      "filePath": "../ConsoleApplication1/ConsoleApplication1.csproj"
    },
    {
      "filePath": "../WebJob1/WebJob1.csproj"
    }
  ]
}

Este archivo se puede editar directamente en Visual Studio, con IntelliSense. El esquema del archivo se almacena en https://schemastore.org.

Implementación de un proyecto de WebJobs

Un proyecto de WebJobs que se haya vinculado a un proyecto web se implementa automáticamente con este último. Para información sobre la implementación de proyectos web, consulte How-to guides>Deploy the app (Guías de procedimientos > Implementar la aplicación) en el panel de navegación izquierdo.

Para implementar un proyecto de WebJobs por sí solo, haga clic con el botón derecho en el proyecto en el Explorador de soluciones y, luego, seleccione Publicar como WebJob de Azure.

Publish as Azure WebJob

Para un trabajo web independiente, aparece el mismo asistente Publicación web que se usa para los proyectos web, pero con menos configuraciones disponibles para cambiar.

Cuadro de diálogo Agregar Azure WebJob

El cuadro de diálogo Agregar Azure WebJob le permite escribir el nombre del WebJob y configurar el modo de ejecución de WebJob.

Add Azure WebJob dialog box

Algunos de los campos de este cuadro de diálogo corresponden a los campos del cuadro de diálogo Agregar WebJob de Azure Portal. Para más información, consulte Ejecución de tareas en segundo plano con WebJobs en Azure App Service.

Información de implementación de WebJob:

  • Para obtener información sobre la implementación de línea de comandos, consulte Activación de la línea de comandos o de la entrega continua de Azure WebJobs.

  • Si implementa un WebJob y posteriormente decide que quiere cambiar el tipo de WebJob y volver a implementarlo, elimine el archivo webjobs-publish-settings.json. Al hacerlo, Visual Studio vuelve a mostrar las opciones de publicación, de forma que puede cambiar el tipo de WebJob.

  • Si implementa un WebJob y más tarde cambia el modo de ejecución de continuo a no continuo o viceversa, Visual Studio crea un nuevo WebJob en Azure cuando vuelva a implementar. Si cambia otra configuración de programación, pero deja el mismo modo de ejecución o cambia entre el modo Programado y A petición, Visual Studio actualiza el trabajo existente en lugar de crear uno nuevo.

Tipos de WebJob

El tipo de un WebJob puede ser desencadenado o continuo:

  • Desencadenado (valor predeterminado): los WebJobs desencadenados se inician en función de un evento de enlace, según una programación, o cuando se desencadenan manualmente (a petición). Se ejecuta en una sola instancia en la que se ejecuta la aplicación web.

  • Continuo: los WebJobs continuos se inician inmediatamente cuando se crea el WebJob. Se ejecuta en todas las instancias escaladas de la aplicación web de forma predeterminada, pero se puede configurar para que se ejecute como una instancia única a través de settings.job.

Nota

Una aplicación web puede agotar el tiempo de espera después de 20 minutos de inactividad y solo las solicitudes a la aplicación web real pueden restablecer el temporizador. Al ver la configuración de la aplicación en Azure Portal o realizar solicitudes en el sitio de herramientas avanzadas (https://<app_name>.scm.azurewebsites.net), no se restablece el temporizador. Si configura la aplicación web en la que se hospeda el trabajo para que se ejecute de forma continua, se ejecute según una programación o utilice desencadenadores basados en eventos, habilite la opción Siempre activado en la página Configuración de Azure de la aplicación web. La configuración Always On ayuda a asegurarse de que estos tipos de WebJob se ejecuten de forma confiable. Esta característica solo está disponible en los planes de tarifa Básico, Estándar y Premium.

Programación de un trabajo web desencadenado

Al publicar una aplicación de consola en Azure, Visual Studio establece el tipo de WebJob en Desencadenado de forma predeterminada, y agrega un nuevo archivo settings.job al proyecto. En el caso de los tipos de WebJob desencadenados, puede usar este archivo para establecer una programación de ejecución para el WebJob.

Utilice el archivo settings.job para programar la ejecución del trabajo WebJob. El siguiente ejemplo se ejecuta cada hora de 9: 00 a 17:00:

{
    "schedule": "0 0 9-17 * * *"
}

Este archivo está ubicado en la raíz de la carpeta de WebJobs, junto con el script de WebJob; por ejemplo, wwwroot\app_data\jobs\triggered\{job name} o wwwroot\app_data\jobs\continuous\{job name}. Cuando implemente un WebJob desde Visual Studio, marque las propiedades del archivo settings.job en Visual Studio como Copiar si es más nuevo.

Si crea un WebJob en Azure Portal, el archivo settings.job se crea automáticamente.

Expresiones CRON

WebJobs usa las mismas expresiones CRON para realizar la programación que el desencadenador de temporizador de Azure Functions. Para obtener más información sobre la compatibilidad con CRON, consulte Desencadenador de temporizador para Azure Functions.

Nota

La zona horaria predeterminada que se usa para ejecutar las expresiones CRON es la Hora universal coordinada (UTC). Para que la expresión CRON se ejecute según otra zona horaria, cree una configuración de aplicación para la aplicación de función denominada WEBSITE_TIME_ZONE. Para más información, consulte Zonas horarias de NCRONTAB.

Referencia de settings.job

WebJobs admite las siguientes opciones de configuración:

Configuración Tipo Descripción
is_in_place All Permite que el WebJob se ejecute en su lugar sin copiarse primero en una carpeta temporal. Para más información, consulte Directorio de trabajo de WebJob.
is_singleton Continuo Ejecute solo el WebJob en una única instancia cuando escale horizontalmente. Para más información, consulte Establecimiento de un trabajo continuo como singleton.
schedule Desencadenado Ejecute el trabajo web utilizando una programación basada en CRON. Para más información, consulte Expresiones NCRONTAB.
stopping_wait_time All Permite controlar el comportamiento de apagado. Para más información, consulte el cierre correcto.

Ejecución continua

Si habilita Siempre activado en Azure, puede usar Visual Studio para cambiar el WebJob para que se ejecute de forma continua:

  1. Si todavía no lo ha hecho, publique el proyecto en Azure.

  2. En el Explorador de soluciones, haga clic con el botón derecho en el proyecto y seleccione Publicar.

  3. En la sección Configuración, seleccione Mostrar toda la configuración.

  4. En el cuadro de diálogo Configuración de perfil, seleccione Continuo en Tipo de WebJob y, luego, elija Guardar.

    Publish Settings dialog box for a WebJob

  5. Seleccione Publicar en la pestaña Publicar para volver a publicar el WebJob con la configuración actualizada.

Pasos siguientes