首页 > 解决方案 > 部署到 Azure 应用服务的 WorkerService 未启动

问题描述

我正在 .NET Core 3.1 中创建一个新的 WorkerService ( https://docs.microsoft.com/en-us/aspnet/core/fundamentals/host/hosted-services?view=aspnetcore-3.1&tabs=visual-studio )并将其部署到 Azure 应用服务。在其中,它仅在 Worker 服务上,它每 3 秒记录一条消息。

public class Worker : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            Log.Information("Worker running");
            await Task.Delay(3000, stoppingToken);
        }
    }
}

我正在使用 Azure 发布管道的 Azure App Service 部署任务来部署它。部署顺利完成,但应用程序未启动。我知道这一点,因为我检查日志。除了登录工作人员,我还登录应用程序启动Program.cs

当我导航到 Azure 门户上的控制台并启动它时,dotnet Worker.dll它会启动并且工作正常。我看到消息记录到 blob 容器中。

我需要为工人服务做任何特别的事情吗?我正在从 Azure 发布管道部署 .NET Core 3.1 Web 应用程序,我没有遇到任何问题。

编辑:

当从 VS2019 发布为 Azure WebJob(此和文件夹是您可以选择的发布目标)时,它按预期工作。但是现在它在 WebJobs 刀片中可见。因此,我认为这是与 Azure Devops 不同的部署。

标签: c#azure.net-coreazure-devopsazure-web-app-service

解决方案


首先,我建议您使用WebJobs SDK编写 webjob 应用程序。官方的做法是创建一个普通的控制台应用,然后添加功能。

其次,您需要run.cmd在您的 webjob 目录中添加一个脚本。

这是一个示例:

  1. 添加附加参数以发布到Publishdotnet 任务中的特定路径。

--output $(Build.ArtifactStagingDirectory)\WebJob\app_data\Jobs\Continuous\WebJob

在此处输入图像描述

  1. 添加 PowerShell 任务以生成run.cmd脚本

重要提示:请确保设置正确的工作目录如下:

脚本:"dotnet WebJob.dll %*" | Out-File run.cmd -Encoding ASCII,请更改WebJob.dll为您的 dll 名称。

工作目录:$(Build.ArtifactStagingDirectory)\WebJob\app_data\Jobs\Continuous\WebJob

在此处输入图像描述

  1. 发布工件

发布路径:$(Build.ArtifactStagingDirectory)\WebJob\

在此处输入图像描述

  1. 如果一切正常,您将在运行构建管道后得到一个工件:

在此处输入图像描述

  1. 创建发布管道

选择正确的文件夹。我的是$(System.DefaultWorkingDirectory)/_Webjob-ASP.NET Core-CI/drop,你应该用你正确的文件夹路径来改变它。

在此处输入图像描述

  1. 检查网络应用程序:

在此处输入图像描述

在此处输入图像描述


推荐阅读