Desenvolver e implantar os Trabalhos Web usando o Visual Studio

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

Você pode optar por desenvolver um Trabalho Web que seja executado como um aplicativo .NET Core ou um aplicativo .NET Framework. A versão 3.x do SDK dos Trabalhos Web do Azure permite que você desenvolva Trabalhos Web que são executados como aplicativos .NET Core ou .NET Framework, e a versão 2.x dá suporte apenas aos aplicativos .NET Framework. A maneira de implantar um projeto de Trabalhos Web é diferente para projetos do .NET Core e para projetos do .NET Framework.

Você pode publicar vários Trabalhos Web em um aplicativo Web, desde que cada Trabalho no aplicativo Web tenha um nome exclusivo.

Trabalhos Web como aplicativos de console do .NET Core

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

Observação

Não é possível vincular aplicativos Web .NET Core e/ou WebJobs .NET Core a projetos da Web. Se você precisa implantar o Trabalho Web com um aplicativo Web, crie os Trabalhos Web como um aplicativo de console .NET Framework.

Implantar no Serviço de Aplicativo do Azure

A publicação de um Trabalho Web do .NET Core para o 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ção Valor sugerido Description
    Nome Nome globalmente exclusivo Nome que identifica seu novo aplicativo de funções de forma exclusiva.
    Assinatura Escolha sua assinatura A assinatura do Azure a utilizar.
    Grupo de recursos myResourceGroup 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.

    Create App Service dialog box

  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.

Trabalhos Web como aplicativos de console .NET Framework

Se você usar o Visual Studio para implantar um projeto de aplicativo de console .NET Framework habilitado para Trabalhos Web, ele vai copiar os arquivos de runtime para a pasta apropriada no aplicativo Web (App_Data/jobs/continuous para Trabalhos Web contínuos e App_Data/jobs/triggered para Trabalhos Web agendados ou sob demanda).

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

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

É possível adicionar esses itens a um projeto do aplicativo de console existente ou usar um modelo para criar um projeto do aplicativo de console habilitado para Trabalhos Web.

Implantar um projeto como um Trabalho Web propriamente dito ou vinculá-lo a um projeto Web de maneira que ele seja implantado automaticamente sempre que você implanta o projeto Web. Para vincular projetos, o Visual Studio inclui o nome do projeto habilitado para Trabalhos Web em um arquivo webjobs-list.json no projeto Web.

Diagram showing WebJob project linking to web project

Pré-requisitos

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

Habilitar a implantação dos Trabalhos Web em um projeto existente do aplicativo de console

Você tem duas opções:

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

    Configure um projeto do aplicativo de console existente de maneira que ele seja implantado automaticamente como um Trabalho Web quando você implanta um projeto Web. Use esta opção quando quiser executar o Trabalho Web no mesmo aplicativo Web em que você executa o aplicativo Web relacionado.

  • Habilitar implantação sem um projeto Web.

    Configure um projeto do aplicativo de console existente a ser implantado como um Trabalho Web propriamente dito, sem link para um projeto Web. Use esta opção quando você quiser executar um Trabalho Web em um aplicativo Web por si só, sem nenhum aplicativo Web em execução no aplicativo Web. Você pode fazer isso para dimensionar os recursos do Trabalho Web 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 um Trabalho Web do Azure.

    Existing Project as Azure WebJob

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

  2. Na lista suspensa Nome do projeto, selecione o projeto do aplicativo de console a ser adicionado como um Trabalho Web.

    Selecting project in Add Azure WebJob dialog box

  3. Complete a caixa de diálogo Adicionar Trabalho Web 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.

    Publish as Azure WebJob

    A caixa de diálogo Adicionar Trabalho Web do Azure é exibida, com o projeto selecionado na caixa Nome do projeto .

  2. Complete a caixa de diálogo Adicionar Trabalho Web do Azure e selecione OK.

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

Criar um novo projeto habilitado para Trabalhos Web

Para criar um projeto habilitado para os Trabalhos Web, use o modelo de projeto do aplicativo de console e habilite a implantação dos Trabalhos Web conforme explicado na seção anterior. Também é possível usar o modelo do novo projeto de Trabalhos Web:

Observação

O modelo new-project do WebJobs instala automaticamente pacotes NuGet e inclui o código em Program.cs para o SDK do WebJobs. Se você não desejar usar o SDK do WebJobs, remova ou altere a instrução host.RunAndBlock em Program.cs.

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

  2. Siga as direções mostradas anteriormente para tornar o projeto do aplicativo de console um projeto de Trabalho Web independente.

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

    New Azure WebJob Project menu entry

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

  2. Complete a caixa de diálogo Adicionar Trabalho Web do Azure e selecione OK.

Arquivo webjob-publish-settings.json

Quando você configura um aplicativo de console para implantação dos Trabalhos Web, 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 dos Trabalhos Web. 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"
}

É possível editar esse arquivo diretamente, e o Visual Studio fornece o IntelliSense. O esquema de arquivo é armazenado em https://schemastore.org e pode ser exibido.

Arquivo webjobs-list.json

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

{
  "$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 de Trabalhos Web

Um projeto de Trabalhos Web vinculado a um projeto Web é implantado automaticamente com o projeto Web. Para obter informações sobre a implantação de projetos Web, confira os Guias de instruções>Implantar o aplicativo na navegação à esquerda.

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

Publish as Azure WebJob

Para um Trabalho Web independente, o mesmo assistente Publicar Web usado em projetos Web é exibido, mas com menos configurações disponíveis para serem alteradas.

Caixa de diálogo Adicionar Trabalho Web do Azure

A caixa de diálogo Adicionar Trabalho Web do Azure permite inserir o nome do Trabalho Web e a configuração de modo de execução do Trabalho Web.

Add Azure WebJob dialog box

Alguns campos dessa caixa de diálogo correspondem aos campos da caixa de diálogo Adicionar Trabalho Web do portal do Azure. Para obter mais informações, consulte Executar tarefas em segundo plano com os Trabalhos Web no Serviço de Aplicativo do Azure.

Informações de implantação de Trabalho Web:

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

  • Se você implantar um Trabalho Web, decidir alterar o tipo de Trabalho Web e implantá-lo novamente, você vai precisar excluir o arquivo webjobs-publish-settings.json. Isso faz com que o Visual Studio reexiba as opções de publicação, para que você possa alterar o tipo de Trabalho Web.

  • Se você implantar um Trabalho Web e depois alterar o modo de execução de contínuo para não contínuo ou vice-versa, o Visual Studio criará um novo Trabalho Web no Azure quando você o reimplantar. Se você alterar outras configurações de agendamento, mas deixar o modo de execução igual ou alternar Agendado e Sob Demanda, o Visual Studio atualiza o trabalho existente em vez de criar outro.

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 na instância única na qual o aplicativo Web é executado.

  • Contínuo: um Trabalho Web contínuo é iniciado imediatamente quando o Trabalho Web é criado. Ele é executado em todas as instâncias escaladas do aplicativo Web por padrão, mas pode ser configurado para executar como instância única por meio do 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. As ações de exibir a configuração do aplicativo no portal do Azure ou fazer solicitações para o site de ferramentas avançadas (https://<app_name>.scm.azurewebsites.net) não reiniciam o temporizador. Se você definir o aplicativo Web que hospeda seu trabalho para ser executado continuamente, executado por agenda ou usar gatilhos orientados a eventos, habilite a configuração Always On na página Configuração do Azure do aplicativo Web. A configuração Always On ajuda a garantir que esses tipos de WebJobs sejam executados de maneira 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 Trabalhos Web do tipo disparado, você pode usar esse arquivo para definir um agendamento de execução para o Trabalho Web.

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

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

Esse arquivo está localizado na raiz da pasta de Trabalhos Web junto ao script, 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 Trabalho Web 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 têm suporte dos Trabalhos Web:

Configuração Tipo Descrição
is_in_place Tudo Permite que os Trabalhos Web sejam executados no local sem serem copiados para uma pasta temporária. Para obter mais informações, confira Diretório de trabalho do Trabalho Web.
is_singleton Contínuo O Trabalho Web é executado em instância única somente quando escalado horizontalmente. Para obter mais informações, confira Definir um trabalho contínuo como singleton.
schedule Disparado O Trabalho Web é executado com agendamento baseado em CRON. Para obter mais informações, confira Expressões NCRONTAB.
stopping_wait_time Tudo Permite o controle do comportamento de desligamento. Para obter mais informações, consulte Desligamento normal.

Execução contínua

Se você habilitar o Sempre ativado no Azure, você pode usar o Visual Studio para alterar o Trabalho Web 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 o Tipo de Trabalho Web e escolha Salvar.

    Publish Settings dialog box for a WebJob

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

Próximas etapas