部署到 Azure 应用服务的 WorkerService 未启动

Pio*_*rak 2 c# azure .net-core azure-web-app-service azure-devops

我正在 .NET Core 3.1 中创建一个新的 WorkerService (https://learn.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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 Azure 发布管道的 Azure 应用服务部署任务来部署它。部署顺利进行,没有任何错误,但应用程序未启动。我知道这一点是因为我检查日志。除了登录工作人员之外,我还登录应用程序启动Program.cs

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

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

编辑:

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

Jac*_*Jia 7

首先,我建议您使用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. 检查网络应用程序:

在此输入图像描述

在此输入图像描述