Compartir a través de


Desarrollo e implementación de trabajos web con 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 en Azure App Service como un WebJob de Azure. Para obtener información sobre cómo implementar WebJobs mediante Azure Portal, consulte Ejecución de tareas en segundo plano con WebJobs en Azure App Service.

Puede optar por desarrollar un trabajo web que se ejecute como una aplicación de .NET Core o una aplicación de .NET Framework. La versión 3.x del SDK de WebJobs de Azure permite desarrollar trabajos web que se ejecutan como aplicaciones de .NET Core o aplicaciones de .NET Framework, mientras que la versión 2.x solo admite .NET Framework. La forma de implementar un proyecto de WebJobs es diferente para los proyectos de .NET Core que para los proyectos 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.

WebJobs como aplicaciones de consola de .NET Core

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

Nota:

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

Implementación en Azure App Service

La publicación de un WebJob de .NET Core en Azure App Service desde Visual Studio usa las mismas herramientas que la publicación de una aplicación 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 Descripción
    Nombre Nombre único global Nombre que identifica de forma única la nueva aplicación de función.
    Suscripción Elección de la suscripción La suscripción de Azure que se utilizará.
    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 nuevo grupo de recursos.
    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.

    Cuadro de diálogo Crear servicio de aplicaciones

  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.

WebJobs 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, copia los archivos en tiempo de ejecución en la carpeta adecuada 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 un proyecto habilitado para WebJobs:

Diagrama que muestra lo que se agrega a una aplicación de consola para habilitar la implementación como un trabajo web

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 habilitado para WebJobs.

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

Diagrama que muestra el enlace del proyecto WebJob al proyecto web

Prerrequisitos

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:

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

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

  • Habilite la implementación sin un proyecto web.

    Configure un proyecto de aplicación de consola existente para que se implemente como un WebJob por sí mismo, sin un vínculo a un proyecto web. Utilice esta opción cuando desee ejecutar un WebJob en una aplicación web por sí mismo, sin que ninguna aplicación web se ejecute en la aplicación web. Es posible que desee hacerlo para escalar los recursos de WebJob independientemente de los recursos de la aplicación web.

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

    Proyecto existente como Azure WebJob

    Aparece el cuadro de diálogo Agregar trabajo web de Azure .

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

    Selección de proyecto en el cuadro de diálogo Agregar trabajo web de Azure

  3. Complete el cuadro de diálogo Agregar trabajo web de Azure y, a continuación, seleccione Aceptar.

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

    Publicar como trabajo web de Azure

    Aparece el cuadro de diálogo Agregar trabajo web de Azure , con el proyecto seleccionado en el cuadro Nombre del proyecto .

  2. Complete el cuadro de diálogo Agregar trabajo web de Azure y, a continuación, seleccione Aceptar.

    Aparece el asistente Publicar web . Si no desea publicar inmediatamente, cierre el asistente. La configuración que ha introducido se guarda para cuando desee implementar el proyecto.

Creación de un nuevo proyecto habilitado para WebJobs

Para crear un nuevo proyecto habilitado para WebJobs, use la plantilla de proyecto de aplicación de consola y habilite la implementación de WebJobs como se explica en la sección anterior. Como alternativa, puede utilizar la plantilla de proyecto nuevo de WebJobs:

  • Usar la plantilla de proyecto nuevo de WebJobs para un trabajo web independiente

    Cree un proyecto y configúrelo para que se implemente por sí mismo como un WebJob, sin vínculo a un proyecto web. Utilice esta opción cuando desee ejecutar un WebJob en una aplicación web por sí mismo, sin que ninguna aplicación web se ejecute en la aplicación web. Es posible que desee hacerlo para escalar los recursos de WebJob independientemente de los recursos de la aplicación web.

  • Usar la plantilla de proyecto nuevo de WebJobs para un WebJob vinculado a un proyecto web

    Cree un proyecto que esté configurado para implementarse automáticamente como un trabajo web al implementar un proyecto web en la misma solución. Utilice esta opción cuando desee ejecutar su WebJob en la misma aplicación web en la que ejecuta la aplicación web relacionada.

Nota:

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

  1. Seleccione Archivo>Nuevo>Proyecto. En el cuadro de diálogo Crear un nuevo proyecto , 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 WebJobs independiente.

  1. Haga clic con el botón secundario en el proyecto web en el Explorador de soluciones y, a continuación, seleccione Agregar>nuevo proyecto de trabajo web de Azure.

    Nueva entrada de menú Proyecto de WebJob de Azure

    Aparece el cuadro de diálogo Agregar trabajo web de Azure .

  2. Complete el cuadro de diálogo Agregar trabajo web de Azure y, a continuación, seleccione Aceptar.

webjob-publish-settings.json archivo

Al configurar una aplicación de consola para la implementación de WebJobs, Visual Studio instala el paquete 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 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 esquema de archivo se almacena en https://schemastore.org y se puede ver allí.

webjobs-list.json archivo

Al vincular un proyecto habilitado para WebJobs a un proyecto web, Visual Studio almacena el nombre del proyecto WebJobs en un archivo webjobs-list.json en la carpeta Propiedades del proyecto web. La lista puede contener varios proyectos WebJobs, como se muestra en el ejemplo siguiente:

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

Puede editar este archivo directamente en Visual Studio, con IntelliSense. El esquema de archivo se almacena en https://schemastore.org.

Implementación de un proyecto de WebJobs

Un proyecto de WebJobs que haya vinculado a un proyecto web se implementa automáticamente con el proyecto web. Para obtener información sobre la implementación de proyectos web, consulte Guías >de la aplicación en el panel de navegación izquierdo.

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

Publicar como trabajo web de Azure

En el caso de un trabajo web independiente, aparece el mismo asistente de publicación web que se utiliza para los proyectos web, pero con menos opciones de configuración disponibles para cambiar.

Cuadro de diálogo Agregar trabajo web de Azure

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

Cuadro de diálogo Agregar trabajo web de Azure

Algunos de los campos de este cuadro de diálogo corresponden a campos del cuadro de diálogo Agregar trabajo web 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 la línea de comandos, consulte Habilitación de la línea de comandos o la entrega continua de trabajos web de Azure.

  • Si implementa un WebJob y, a continuación, decide que desea 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, por lo que puede cambiar el tipo de WebJob.

  • Si implementa un WebJob y, posteriormente, cambia el modo de ejecución de continuo a no continuo o viceversa, Visual Studio crea un nuevo WebJob en Azure al volver a implementarlo. Si cambia otras opciones de programación, pero deja el modo de ejecución igual o cambia entre Programado y A petición, Visual Studio actualiza el trabajo existente en lugar de crear uno nuevo.

Tipos de WebJob

El tipo de WebJob puede ser desencadenado o continuo:

  • Desencadenado (valor predeterminado): un WebJob desencadenado se inicia en función de un evento de enlace, según una programación o cuando se desencadena manualmente (a petición). Se ejecuta en una sola instancia en la que se ejecuta la aplicación web.

  • Continuo: Un WebJob continuo se inicia inmediatamente cuando se crea el WebJob. Se ejecuta en todas las instancias escaladas de aplicaciones web de forma predeterminada, pero se puede configurar para que se ejecute como una sola instancia 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. La visualización de la configuración de la aplicación en Azure Portal o la realización de solicitudes al sitio de herramientas avanzadas no restablece el temporizador. Si establece la aplicación web que hospeda el trabajo para que se ejecute continuamente, se ejecute según una programación o use desencadenadores controlados por eventos, habilite la configuración AlwaysOn en el panel Configuración de Azure de la aplicación web. La configuración Always On ayuda a asegurarse de que estos tipos de WebJobs se ejecutan de forma confiable. Esta característica solo está disponible en los planes de tarifa Básico, Estándar y Premium.

Programación de un WebJob 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 establecer una programación de ejecución para su WebJob. El siguiente ejemplo se ejecuta cada hora de 9 a.m. a 5 p.m.:

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

Este archivo se encuentra en la raíz de la carpeta WebJobs con el script de WebJob, como wwwroot\app_data\jobs\triggered\{job name} o wwwroot\app_data\jobs\continuous\{job name}. Al implementar un WebJob desde Visual Studio, marque las propiedades del archivo settings.job en Visual Studio como Copy si es más reciente.

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

Expresiones CRON

WebJobs usa las mismas expresiones CRON para la programación que el desencadenador del temporizador en Azure Functions. Para 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 los siguientes ajustes:

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

Ejecución continua

Si habilita Always on en Azure, puede usar Visual Studio para cambiar el WebJob para que se ejecute continuamente:

  1. Si aún 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 , elija Mostrar todas las configuraciones.

  4. En el cuadro de diálogo Configuración del perfil , elija Continuo para Tipo de trabajo web y, a continuación, elija Guardar.

    Cuadro de diálogo Configuración de publicación para un trabajo web

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

Pasos siguientes