Desenvolver e implementar WebJobs com o Visual Studio

Este artigo explica como utilizar o Visual Studio para implementar um projeto de aplicação de consola numa aplicação Web no Serviço de Aplicações do Azure como um WebJob do Azure. Para obter informações sobre como implementar WebJobs com o portal do Azure, consulte Executar tarefas em segundo plano com WebJobs no Serviço de Aplicações do Azure.

Pode optar por desenvolver um WebJob que é executado como uma aplicação .NET Core ou uma aplicação .NET Framework. A versão 3.x do SDK de WebJobs do Azure permite-lhe desenvolver WebJobs que são executados como aplicações .NET Core ou aplicações .NET Framework, enquanto a versão 2.x suporta apenas a .NET Framework. A forma como implementa um projeto webJobs é diferente para projetos .NET Core do que para projetos .NET Framework.

Pode publicar vários WebJobs numa única aplicação Web, desde que cada WebJob numa aplicação Web tenha um nome exclusivo.

WebJobs como aplicações de consola .NET Core

Com a versão 3.x do SDK de WebJobs do Azure, pode criar e publicar WebJobs como aplicações de consola .NET Core. Para obter instruções passo a passo para criar e publicar uma aplicação de consola .NET Core no Azure como um WebJob, veja Introdução ao SDK de WebJobs do Azure para processamento em segundo plano baseado em eventos.

Nota

Os WebJobs do .NET Core Aplicações Web e/ou .NET Core não podem ser ligados a projetos Web. Se precisar de implementar o Seu WebJob com uma aplicação Web, crie os seus WebJobs como uma aplicação de consola .NET Framework.

Implementar no Serviço de Aplicações do Azure

Publicar um WebJob .NET Core para Serviço de Aplicações do Azure a partir do Visual Studio utiliza as mesmas ferramentas que publicar uma aplicação ASP.NET Core.

  1. No Explorador de Soluções, clique com o botão direito do rato no projeto e selecione Publicar.

  2. Na caixa de diálogo Publicar , selecione Azure para Destino e, em seguida, selecione Seguinte.

  3. Selecione WebJobs do Azure para Destino específico e, em seguida, selecione Seguinte.

  4. Acima Serviço de Aplicações instâncias, selecione o botão de adição (+) para Criar um novo WebJob do Azure.

  5. Na caixa de diálogo Serviço de Aplicações (Windows), utilize as definições de alojamento na tabela seguinte.

    Definição Valor sugerido Descrição
    Nome Nome globalmente exclusivo Nome que identifica exclusivamente a sua nova aplicação de funções.
    Subscrição Escolher a sua subscrição A subscrição do Azure que deve utilizar.
    Grupo de recursos myResourceGroup Nome do grupo de recursos no qual a sua aplicação de funções será criada. Escolha Novo para criar um grupo de recursos novo.
    Plano de Alojamento Plano do Serviço de Aplicações Um plano do serviço de aplicações especifica o local, tamanho e funcionalidades da farm de servidores Web que aloja a aplicação. Pode economizar dinheiro ao alojar várias aplicações, configurando as aplicações Web para partilhar um único plano do serviço de aplicações. Serviço de Aplicações planos definem a região, o tamanho da instância, a contagem de dimensionamento e o SKU (Gratuito, Partilhado, Básico, Standard ou Premium). Selecione Novo para criar um novo plano de Serviço de Aplicações. Os escalões Gratuito e Básico não suportam a opção AlwaysOn para manter o seu site em execução continuamente.

    Caixa de diálogo Criar Serviço de Aplicações

  6. Selecione Criar para criar um WebJob e recursos relacionados no Azure com estas definições e implemente o código do projeto.

  7. Selecione Concluir para regressar à página Publicar .

WebJobs como aplicações de consola .NET Framework

Se utilizar o Visual Studio para implementar um projeto de aplicação de consola de .NET Framework compatível com WebJobs, este copia ficheiros de runtime para a pasta adequada na aplicação Web (App_Data/tarefas/contínua para WebJobs contínuos e App_Data/tarefas/acionados para WebJobs agendados ou a pedido).

O Visual Studio adiciona os seguintes itens a um projeto compatível com WebJobs:

Diagrama a mostrar o que é adicionado a uma aplicação de consola para ativar a implementação como um WebJob

Pode adicionar estes itens a um projeto de aplicação de consola existente ou utilizar um modelo para criar um novo projeto de aplicação de consola compatível com WebJobs.

Implemente um projeto como um WebJob por si só ou ligue-o a um projeto Web para que seja implementado automaticamente sempre que implementar o projeto Web. Para ligar projetos, o Visual Studio inclui o nome do projeto preparado para WebJobs num ficheiro webjobs-list.json no projeto Web.

Diagrama a mostrar o projeto de WebJob a ligar a um projeto Web

Pré-requisitos

Instale o Visual Studio 2022 com a carga de trabalho de desenvolvimento do Azure.

Ativar a implementação de WebJobs para um projeto de aplicação de consola existente

Tem duas opções:

  • Ativar a implementação automática com um projeto Web.

    Configure um projeto de aplicação de consola existente para que seja implementado automaticamente como um WebJob ao implementar um projeto Web. Utilize esta opção quando quiser executar o WebJob na mesma aplicação Web na qual executa a aplicação Web relacionada.

  • Ativar a implementação sem um projeto Web.

    Configure um projeto de aplicação de consola existente para implementar como um WebJob por si só, sem uma ligação para um projeto Web. Utilize esta opção quando quiser executar um WebJob numa aplicação Web por si só, sem nenhuma aplicação Web em execução na aplicação Web. Poderá querer fazê-lo para dimensionar os recursos do WebJob independentemente dos recursos da sua aplicação Web.

  1. Clique com o botão direito do rato no projeto Web no Explorador de Soluções e, em seguida, selecione Adicionar>Projeto Existente como WebJob do Azure.

    Projeto Existente como WebJob do Azure

    É apresentada a caixa de diálogo Adicionar WebJob do Azure .

  2. Na lista pendente Nome do projeto , selecione o projeto da aplicação de consola a adicionar como um WebJob.

    Selecionar o projeto na caixa de diálogo Adicionar WebJob do Azure

  3. Preencha a caixa de diálogo Adicionar WebJob do Azure e, em seguida, selecione OK.

  1. Clique com o botão direito do rato no projeto da aplicação de consola no Explorador de Soluções e, em seguida, selecione Publicar como WebJob do Azure.

    Publicar como WebJob do Azure

    É apresentada a caixa de diálogo Adicionar WebJob do Azure , com o projeto selecionado na caixa Nome do projeto .

  2. Preencha a caixa de diálogo Adicionar WebJob do Azure e, em seguida, selecione OK.

    É apresentado o assistente Publicar Web . Se não quiser publicar imediatamente, feche o assistente. As definições que introduziu são guardadas para quando pretender implementar o projeto.

Criar um novo projeto compatível com WebJobs

Para criar um novo projeto compatível com WebJobs, utilize o modelo de projeto de aplicação de consola e ative a implementação de WebJobs, conforme explicado na secção anterior. Como alternativa, pode utilizar o modelo de novo projeto do WebJobs:

  • Utilizar o modelo de novo projeto do WebJobs para um WebJob independente

    Crie um projeto e configure-o para implementar por si só como um WebJob, sem qualquer ligação para um projeto Web. Utilize esta opção quando quiser executar um WebJob numa aplicação Web por si só, sem nenhuma aplicação Web em execução na aplicação Web. Poderá querer fazê-lo para dimensionar os recursos do WebJob independentemente dos recursos da sua aplicação Web.

  • Utilizar o modelo de novo projeto do WebJobs para um WebJob ligado a um projeto Web

    Crie um projeto configurado para ser implementado automaticamente como um WebJob quando implementar um projeto Web na mesma solução. Utilize esta opção quando quiser executar o WebJob na mesma aplicação Web na qual executa a aplicação Web relacionada.

Nota

O modelo de novo projeto do WebJobs instala automaticamente pacotes NuGet e inclui código em Program.cs para o SDK de WebJobs. Se não quiser utilizar o SDK de WebJobs, remova ou altere a host.RunAndBlock instrução em Program.cs.

  1. Selecione Ficheiro>Novo>Projeto. Na caixa de diálogo Criar um novo projeto, procure e selecione WebJob do Azure (.NET Framework) para C#.

  2. Siga as instruções anteriores para tornar o projeto da aplicação de consola num projeto Independente de WebJobs.

  1. Clique com o botão direito do rato no projeto Web no Explorador de Soluções e, em seguida, selecione Adicionar>Novo Projeto de WebJob do Azure.

    Entrada do menu Novo Projeto de WebJob do Azure

    É apresentada a caixa de diálogo Adicionar WebJob do Azure .

  2. Conclua a caixa de diálogo Adicionar WebJob do Azure e, em seguida, selecione OK.

ficheiro webjob-publish-settings.json

Quando configura uma aplicação de consola para a implementação do WebJobs, o Visual Studio instala o pacote Microsoft.Web.WebJobs.Publish NuGet e armazena informações de agendamento num ficheiro webjob-publish-settings.json na pasta Propriedades do projeto do projeto WebJobs. Eis um exemplo desse ficheiro:

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

Pode editar este ficheiro diretamente e o Visual Studio fornece o IntelliSense. O esquema de ficheiro é armazenado em https://schemastore.org e pode ser visualizado aí.

ficheiro webjobs-list.json

Quando liga um projeto compatível com WebJobs a um projeto Web, o Visual Studio armazena o nome do projeto WebJobs num ficheiro webjobs-list.json na pasta Propriedades do projeto Web. A lista pode conter vários projetos WebJobs, conforme mostrado no exemplo seguinte:

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

Pode editar este ficheiro diretamente no Visual Studio, com o IntelliSense. O esquema de ficheiro é armazenado em https://schemastore.org.

Implementar um projeto webJobs

Um projeto WebJobs que tenha ligado a um projeto Web é implementado automaticamente com o projeto Web. Para obter informações sobre a implementação de projetos Web, veja Guias de procedimentos>Implementar a aplicação no painel de navegação esquerdo.

Para implementar um projeto WebJobs sozinho, clique com o botão direito do rato no projeto no Explorador de Soluções e selecione Publicar como WebJob do Azure.

Publicar como WebJob do Azure

Para um WebJob independente, é apresentado o mesmo assistente Publicar Web que é utilizado para projetos Web, mas com menos definições disponíveis para alterar.

Caixa de diálogo Adicionar WebJob do Azure

A caixa de diálogo Adicionar WebJob do Azure permite-lhe introduzir o nome do WebJob e a definição do modo de execução do WebJob.

Caixa de diálogo Adicionar WebJob do Azure

Alguns dos campos nesta caixa de diálogo correspondem a campos na caixa de diálogo Adicionar WebJob do portal do Azure. Para obter mais informações, veja Executar tarefas em segundo plano com WebJobs no Serviço de Aplicações do Azure.

Informações de implementação do WebJob:

  • Para obter informações sobre a implementação da linha de comandos, veja Enabling Command-line or Continuous Delivery of Azure WebJobs (Ativar a Linha de Comandos ou a Entrega Contínua de WebJobs do Azure).

  • Se implementar um WebJob e, em seguida, decidir que pretende alterar o tipo de WebJob e reimplementar, elimine o ficheiro webjobs-publish-settings.json . Fazê-lo faz com que o Visual Studio reproduza novamente as opções de publicação, para que possa alterar o tipo de WebJob.

  • Se implementar um WebJob e, posteriormente, alterar o modo de execução de contínuo para não contínuo ou vice-versa, o Visual Studio cria um novo WebJob no Azure quando reimplementar. Se alterar outras definições de agendamento, mas deixar o modo de execução igual ou alternar entre Agendado e a Pedido, o Visual Studio atualiza a tarefa existente em vez de criar uma nova.

Tipos de WebJob

O tipo de WebJob pode ser acionado ou contínuo:

  • Acionado (predefinição): um WebJob acionado é iniciado com base num evento de enlace, numa agenda ou quando o aciona manualmente (a pedido). É executada numa única instância em que a aplicação Web é executada.

  • Contínuo: um WebJob contínuo é iniciado imediatamente quando o WebJob é criado. É executada em todas as instâncias dimensionadas de aplicações Web por predefinição, mas pode ser configurada para ser executada como uma única instância através de settings.job.

Nota

Uma aplicação Web pode exceder o tempo limite após 20 minutos de inatividade e apenas os pedidos para a aplicação Web real podem repor o temporizador. Ver a configuração da aplicação no portal do Azure ou fazer pedidos para o site de ferramentas avançadas (https://<app_name>.scm.azurewebsites.net) não repõe o temporizador. Se definir a aplicação Web que aloja a sua tarefa para ser executada continuamente, executar com base numa agenda ou utilizar acionadores orientados por eventos, ative a definição Alwayson na página Configuração do Azure da sua aplicação Web. A definição Alwayson ajuda a garantir que estes tipos de WebJobs são executados de forma fiável. Esta funcionalidade só está disponível nos escalões de preço Básico, Standard e Premium.

Agendar um WebJob acionado

Quando publica uma aplicação de consola no Azure, o Visual Studio define o tipo de WebJob como Acionado por predefinição e adiciona um novo ficheiro settings.job ao projeto. Para tipos de WebJob acionados, pode utilizar este ficheiro para definir um agendamento de execução para o seu WebJob.

Utilize o ficheiro settings.job para definir um agendamento de execução para o seu WebJob. O exemplo seguinte é executado a cada hora das 9:00 às 17:00:

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

Este ficheiro está localizado na raiz da pasta WebJobs com o script do WebJob, como wwwroot\app_data\jobs\triggered\{job name} ou wwwroot\app_data\jobs\continuous\{job name}. Quando implementar um WebJob a partir do Visual Studio, marque as propriedades do ficheiro settings.job no Visual Studio como Copiar se for mais recente.

Se criar um WebJob a partir do portal do Azure, o ficheiro settings.job é criado automaticmente.

Expressões CRON

O WebJobs utiliza as mesmas expressões CRON para agendar o acionador de temporizador no Funções do Azure. Para saber mais sobre o suporte cron, veja Acionador de temporizador para Funções do Azure.

Nota

O fuso horário predefinido utilizado para executar expressões CRON é Hora Universal Coordenada (UTC). Para que a expressão CRON seja executada com base noutro fuso horário, crie uma definição de aplicação para a sua aplicação de funções com o nome WEBSITE_TIME_ZONE. Para saber mais, veja Fusos horários NCRONTAB.

settings.job reference

As seguintes definições são suportadas pelo WebJobs:

Definição Tipo Descrição
is_in_place Todos Permite que o WebJob seja executado no local sem ser copiado primeiro para uma pasta temporária. Para obter mais informações, veja Diretório de trabalho do WebJob.
is_singleton Contínuo Execute apenas o WebJob numa única instância quando aumentado horizontalmente. Para obter mais informações, veja Definir uma tarefa contínua como singleton.
schedule Acionado Execute o WebJob numa agenda baseada em CRON. Para obter mais informações, veja Expressões NCRONTAB.
stopping_wait_time Todos Permite o controlo do comportamento de encerramento. Para obter mais informações, veja Encerramento gracioso.

Execução contínua

Se ativar o Always on no Azure, pode utilizar o Visual Studio para alterar o WebJob para ser executado continuamente:

  1. Se ainda não o fez, publique o projeto no Azure.

  2. No Explorador de Soluções, clique com o botão direito do rato no projeto e selecione Publicar.

  3. Na secção Definições , selecione Mostrar todas as definições.

  4. Na caixa de diálogo Definições do perfil , selecione Contínuo para Tipo de WebJob e, em seguida, selecione Guardar.

    Caixa de diálogo Publicar Definições para um WebJob

  5. Selecione Publicar no separador Publicar para voltar a publicar o WebJob com as definições atualizadas.

Passos seguintes