Compartilhar via


Desenvolver e implantar WebJobs usando o Visual Studio

Este artigo explica como usar o Visual Studio para implantar um projeto de aplicativo de console em um aplicativo Web no Serviço de Aplicativo do Azure como um Trabalho Web do Azure. Para obter informações sobre como implantar WebJobs usando o portal do Azure, consulte Executar tarefas em segundo plano com WebJobs no Serviço de Aplicativo do Azure.

Você pode optar por desenvolver um WebJob executado como um aplicativo .NET Core ou um aplicativo .NET Framework. A versão 3.x do SDK do Azure WebJobs permite desenvolver WebJobs executados como aplicativos .NET Core ou aplicativos do .NET Framework, enquanto a versão 2.x dá suporte apenas ao .NET Framework. A maneira como você implanta um projeto WebJobs é diferente para projetos do .NET Core do que para projetos do .NET Framework.

Você pode publicar vários WebJobs em um único aplicativo Web, desde que cada WebJob em um aplicativo Web tenha um nome exclusivo.

WebJobs como aplicativos de console do .NET Core

Com a versão 3.x do SDK do Azure WebJobs, você pode criar e publicar WebJobs como aplicativos de console do .NET Core. Para obter instruções passo a passo para criar e publicar um aplicativo de console do .NET Core no Azure como um Trabalho Web, consulte Introdução ao SDK do Azure WebJobs para processamento em segundo plano controlado por eventos.

Observação

Aplicativos Web do .NET Core e/ou WebJobs do .NET Core não podem ser vinculados a projetos Web. Se você precisar implantar seu WebJob com um aplicativo Web, crie seus WebJobs como um aplicativo de console do .NET Framework.

Implantar no Serviço de Aplicativos Azure

A publicação de um WebJob do .NET Core no Serviço de Aplicativo do Azure do Visual Studio usa as mesmas ferramentas que a publicação de um aplicativo ASP.NET Core.

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

  2. Na caixa de diálogo Publicar, selecione Azure como Destino e, em seguida, Avançar.

  3. Selecione Azure WebJobs para Destino específico e, em seguida, selecione Avançar.

  4. Acima das instâncias do Serviço de Aplicativo, selecione o botão mais ( + ) para Criar um novo WebJob do Azure.

  5. Na caixa de diálogo Serviço de Aplicativo (Windows) , use as configurações de hospedagem na tabela a seguir.

    Configurações Valor sugerido Descrição
    Nome Nome globalmente exclusivo Nome que identifica seu novo aplicativo de funções de forma exclusiva.
    Subscrição Escolha sua assinatura A assinatura do Azure que será utilizada.
    Grupo de recursos GrupoDeRecursosMeu Nome do grupo de recursos no qual criar o seu aplicativo de funções. Escolha Novo para criar um novo grupo de recursos.
    Plano de hospedagem Plano do Serviço de Aplicativo Um plano do Serviço de Aplicativo especifica o local, tamanho e recursos do farm de servidores Web que hospeda o aplicativo. Você pode economizar dinheiro ao hospedar vários aplicativos configurando os aplicativos Web para compartilhar um único plano do Serviço de Aplicativo. Os Planos do Serviço de Aplicativo definem a região, o tamanho da instância, a contagem de escala e a SKU (Gratuito, Compartilhado, Básico, Standard ou Premium). Selecione Novo para criar um novo plano do Serviço de Aplicativo. Os níveis Gratuito e Básico não têm suporte para a opção Always On, para manter o site continuamente em execução.

    Criar a caixa de diálogo Serviço de Aplicativo

  6. Selecione Criar para criar um WebJob e recursos relacionados no Azure com essas configurações e implantar seu código de projeto.

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

WebJobs como aplicativos de console do .NET Framework

Se você usar o Visual Studio para implantar um projeto de aplicativo de console do .NET Framework habilitado para WebJobs, ele copiará arquivos de runtime para a pasta apropriada no aplicativo Web (App_Data/trabalhos/contínuos para WebJobs contínuos e App_Data/trabalhos/disparados para WebJobs agendados ou sob demanda).

O Visual Studio adiciona os seguintes itens a um projeto habilitado para WebJobs:

Diagrama mostrando o que é adicionado a um aplicativo de console para habilitar a implantação como um WebJob

Você pode adicionar esses itens a um projeto de aplicativo de console existente ou usar um modelo para criar um novo projeto de aplicativo de console habilitado para WebJobs.

Implante um projeto como um WebJob sozinho ou vincule-o a um projeto Web para que ele seja implantado automaticamente sempre que você implantar o projeto Web. Para vincular projetos, o Visual Studio inclui o nome do projeto habilitado para WebJobs em um arquivo webjobs-list.json no projeto Web.

Diagrama mostrando o projeto WebJob vinculando-se ao projeto Web

Pré-requisitos

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

Habilitar a implantação do WebJobs para um projeto de aplicativo de console existente

Você tem duas opções:

  • Habilite a implantação automática com um projeto Web.

    Configure um projeto de aplicativo de console existente para que ele seja implantado automaticamente como um WebJob ao implantar um projeto Web. Use essa opção quando quiser executar seu WebJob no mesmo aplicativo Web no qual você executa o aplicativo Web relacionado.

  • Habilitar a implantação sem um projeto Web.

    Configure um projeto de aplicativo de console existente para implantar como um WebJob sozinho, sem um link para um projeto Web. Use essa opção quando quiser executar um WebJob em um aplicativo Web sozinho, sem nenhum aplicativo Web em execução no aplicativo Web. Talvez você queira fazer isso para dimensionar os recursos do WebJob independentemente dos recursos do aplicativo Web.

  1. Clique com o botão direito do mouse no projeto Web no Gerenciador de Soluções e selecione Adicionar>Projeto Existente como Trabalho Web do Azure.

    Projeto existente como WebJob do Azure

    A caixa de diálogo Adicionar WebJob do Azure é exibida.

  2. Na lista de opções Nome do Projeto, selecione o projeto de aplicativo de console para adicionar como um WebJob.

    Selecionar projeto na caixa de diálogo Adicionar Trabalho Web do Azure

  3. Conclua a caixa de diálogo Adicionar WebJob do Azure e selecione OK.

  1. Clique com o botão direito do mouse no projeto do aplicativo de console no Gerenciador de Soluções e selecione Publicar como Trabalho Web do Azure.

    Publicar como WebJob do Azure

    A caixa de diálogo Adicionar WebJob do Azure é exibida, com o projeto selecionado na caixa de nome do Projeto .

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

    O assistente Publicar Web é exibido. Se você não quiser publicar imediatamente, feche o assistente. As configurações inseridas são salvas quando você deseja implantar o projeto.

Criar um novo projeto habilitado para WebJobs

Para criar um novo projeto habilitado para WebJobs, use o modelo de projeto do aplicativo de console e habilite a implantação do WebJobs, conforme explicado na seção anterior. Como alternativa, você pode usar o modelo de novo projeto do WebJobs:

Observação

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

  1. Selecione Arquivo>Novo>Projeto. Na caixa de diálogo Criar um novo projeto , pesquise e selecione O Trabalho Web do Azure (.NET Framework) para C#.

  2. Siga as instruções anteriores para tornar o projeto do aplicativo de console um projeto WebJobs independente.

  1. Clique com o botão direito do mouse no projeto Web no Gerenciador de Soluções e selecione Adicionar>Novo Projeto webjob do Azure.

    Nova entrada de menu do Projeto do Azure WebJob

    A caixa de diálogo Adicionar WebJob do Azure é exibida.

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

Arquivo webjob-publish-settings.json

Quando você configura um aplicativo de console para implantação do WebJobs, o Visual Studio instala o pacote NuGet Microsoft.Web.WebJobs.Publish e armazena informações de agendamento em um arquivo webjob-publish-settings.json na pasta Propriedades do projeto do projeto WebJobs. Aqui está um exemplo desse arquivo:

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

Você pode editar esse arquivo diretamente e o Visual Studio fornece o IntelliSense. O esquema de arquivo é armazenado https://schemastore.org e pode ser exibido lá.

Arquivo webjobs-list.json

Quando você vincula um projeto habilitado para WebJobs a um projeto Web, o Visual Studio armazena o nome do projeto WebJobs em um arquivo webjobs-list.json na pasta Propriedades do projeto Web. A lista pode conter vários projetos WebJobs, conforme mostrado no exemplo a seguir:

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

Você pode editar esse arquivo diretamente no Visual Studio, com o IntelliSense. O esquema de arquivo é armazenado em https://schemastore.org.

Implantar um projeto WebJobs

Um projeto WebJobs que você vinculou a um projeto Web é implantado automaticamente com o projeto Web. Para obter informações sobre a implantação do projeto Web, consulte guias> de instruçõesImplantar o aplicativo na navegação à esquerda.

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

Publicar como WebJob do Azure

Para um WebJob independente, o mesmo assistente Publicar Web usado para projetos Web é exibido, mas com menos configurações disponíveis para alteração.

Caixa de diálogo Adicionar WebJob do Azure

A caixa de diálogo Adicionar WebJob do Azure permite que você insira o nome do WebJob e a configuração do modo de execução para seu WebJob.

Caixa de diálogo Adicionar Trabalho Web 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, consulte Executar tarefas em segundo plano com WebJobs no Serviço de Aplicativo do Azure.

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

  • Para obter informações sobre a implantação via linha de comando, consulte Habilitando a execução de linha de comando ou a entrega contínua de Azure WebJobs.

  • Se você implantar um WebJob e decidir que deseja alterar o tipo de WebJob e reimplantar, exclua o arquivo webjobs-publish-settings.json . Isso faz com que o Visual Studio exiba novamente as opções de publicação, permitindo que você altere o tipo de WebJob.

  • Se você implantar um WebJob e posteriormente alterar o modo de execução de contínuo para não contínuo ou vice-versa, o Visual Studio criará um novo WebJob no Azure quando você reimplantar. Se você alterar outras configurações de agendamento, mas deixar o modo de execução da mesma forma ou alternar entre Agendado e Sob Demanda, o Visual Studio atualizará o trabalho existente em vez de criar um novo.

Tipos de WebJob

O tipo de um Trabalho Web pode ser disparado ou contínuo:

  • Disparado (padrão): um Trabalho Web disparado tem início com base em um evento de associação em um agendamento ou quando você o dispara manualmente (sob demanda). Ele é executado em uma única instância na qual o aplicativo Web opera.

  • Contínuo: um WebJob contínuo é iniciado imediatamente quando o WebJob é criado. Ele é executado em todas as instâncias dimensionadas por aplicativos web por padrão, mas pode ser configurado para ser executado como uma única instância via settings.job.

Observação

Um aplicativo Web pode atingir o tempo limite após 20 minutos de inatividade, e somente as solicitações ao aplicativo Web real podem redefinir o temporizador. Exibir a configuração do aplicativo no portal do Azure ou fazer solicitações para o site de ferramentas avançadas não redefine o temporizador. Se você definir o aplicativo Web que hospeda seu trabalho para ser executado continuamente, executar em um agendamento ou usar gatilhos controlados por eventos, habilite a configuração Always on no painel configuração do Azure do aplicativo Web. A configuração Always On ajuda a garantir que esses tipos de WebJobs sejam executados de forma confiável. Este recurso está disponível apenas nos tipos de preço Básico, Standard e Premium.

Agendando um WebJob disparado

Quando você publica um aplicativo de console no Azure, o Visual Studio define o tipo de Trabalho Web como Disparado por padrão e adiciona um novo arquivo settings.job ao projeto. Para tipos de WebJob disparados, você pode usar esse arquivo para definir um agendamento de execução para seu WebJob.

Use o arquivo settings.job para definir um agendamento de execução para seu WebJob. O exemplo a seguir é executado a cada hora das 9h às 17h:

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

Esse arquivo 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}. Ao implantar um Trabalho Web por meio do Visual Studio, marque as propriedades do arquivo settings.job no Visual Studio como Copiar se mais recente.

Se você criar um WebJob no portal do Azure, o arquivo settings.job será criado para você.

Expressões CRON

Os Trabalhos Web usam as mesmas expressões do CRON para agendamento usadas pelo gatilho de temporizador no Azure Functions. Para saber mais sobre o suporte ao CRON, confira Gatilho de temporizador para o Azure Functions.

Observação

O fuso horário padrão usado para executar expressões CRON é o UTC (Tempo Universal Coordenado). Para que a expressão CRON seja executada com base em outro fuso horário, crie uma configuração de aplicativo para o aplicativo de funções denominada WEBSITE_TIME_ZONE. Para saber mais, confira Fusos horários do NCRONTAB.

Referência do settings.job

As seguintes configurações são compatíveis com WebJobs:

Configurações Tipo Descrição
is_in_place Todos Permite que o WebJob seja executado no local sem primeiro ser copiado para uma pasta temporária. Para obter mais informações, consulte o diretório de trabalho do WebJob.
is_singleton Contínuo Execute apenas o WebJob em uma única instância quando escalado horizontalmente. Para obter mais informações, consulte Definir um trabalho contínuo como singleton.
schedule Disparado Execute o WebJob em um agendamento baseado em CRON. Para obter mais informações, consulte expressões NCRONTAB.
stopping_wait_time Todos Permite o controle do comportamento de desligamento. Para obter mais informações, consulte Desligamento normal.

Execução contínua

Se você habilitar o Always On no Azure, poderá usar o Visual Studio para alterar o WebJob para ser executado continuamente:

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

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

  3. Na seção Configurações , escolha Mostrar todas as configurações.

  4. Na caixa de diálogo Configurações de Perfil , escolha Contínuo para Tipo de Trabalho Web e, em seguida, escolha Salvar.

    Caixa de diálogo Configurações de Publicação para um WebJob

  5. Selecione Publicar na guia Publicar para republicar o WebJob com as configurações atualizadas.

Próximas etapas