c# - 部署到 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 不同的部署。
解决方案
首先,我建议您使用WebJobs SDK编写 webjob 应用程序。官方的做法是创建一个普通的控制台应用,然后添加功能。
其次,您需要run.cmd
在您的 webjob 目录中添加一个脚本。
这是一个示例:
- 添加附加参数以发布到
Publish
dotnet 任务中的特定路径。
--output $(Build.ArtifactStagingDirectory)\WebJob\app_data\Jobs\Continuous\WebJob
- 添加 PowerShell 任务以生成
run.cmd
脚本
重要提示:请确保设置正确的工作目录如下:
脚本:"dotnet WebJob.dll %*" | Out-File run.cmd -Encoding ASCII
,请更改WebJob.dll
为您的 dll 名称。
工作目录:$(Build.ArtifactStagingDirectory)\WebJob\app_data\Jobs\Continuous\WebJob
- 发布工件
发布路径:$(Build.ArtifactStagingDirectory)\WebJob\
- 如果一切正常,您将在运行构建管道后得到一个工件:
- 创建发布管道
选择正确的文件夹。我的是$(System.DefaultWorkingDirectory)/_Webjob-ASP.NET Core-CI/drop
,你应该用你正确的文件夹路径来改变它。
- 检查网络应用程序:
推荐阅读
- java - 如何从 Swing 应用程序拖放到 Windows 资源管理器?
- html - 圆形圆圈上的SVG图标并排另一个div,Bootstrap 4.5
- node.js - 地理位置安装问题
- sql - 按特定值查询来查询
- java - 我的 java 程序的文本根据 Windows 比例而模糊
- python - OpenCV 掩码奇怪的像素计数模式
- xamarin - Xamarin forms Android - 是否可以使用共享首选项或安全存储来恢复重新安装应用程序的数据?
- python - 在同一个图中绘制两个数据不完整的数据集
- spring-boot - rsocket - 如何平衡负载
- python - 在树莓派上安装不和谐