Azure Web 作业部署后 运行

Azure Web Jobs fails to run once deployed

我使用网络作业 3.0 和 dotnet 核心创建了一个网络作业。此 webjob 由服务总线触发器触发,目前在本地工作。但是,当我将 webjob 部署到 azure(通过标准 zip 过程,类型设置为连续,并扩展到多实例)时,webjob 部署,然后无法 运行 并出现以下错误。

[07/03/2019 11:30:47 cdae3f: SYS INFO] Run script 'run.cmd' with script host - 'WindowsScriptHost'
[07/03/2019 11:30:47 cdae3f: SYS INFO] Status changed to Running
[07/03/2019 11:30:48 cdae3f: INFO] 
[07/03/2019 11:30:48 cdae3f: INFO] D:\local\Temp\jobs\continuous\export-pdf\kucubmeb.3gj>dotnet exec Foo.ExportPdf.WebJob.dll 
[07/03/2019 11:30:48 cdae3f: ERR ] Error:
[07/03/2019 11:30:48 cdae3f: ERR ]   An assembly specified in the application ependencies manifest (Foo.ExportPdf.WebJob.deps.json) was not found:
[07/03/2019 11:30:48 cdae3f: ERR ]     package: 'System.Text.Encoding.CodePages', version: '4.5.1'
[07/03/2019 11:30:48 cdae3f: ERR ]     path: 'runtimes/win/lib/netcoreapp2.0/System.Text.Encoding.CodePages.dll'
[07/03/2019 11:30:48 cdae3f: ERR ] 
[07/03/2019 11:30:48 cdae3f: SYS ERR ] Job failed due to exit code -2147450740
[07/03/2019 11:30:48 cdae3f: SYS INFO] Process went down, waiting for 60 seconds
[07/03/2019 11:30:48 cdae3f: SYS INFO] Status changed to PendingRestart

现在查看上面的错误日志,它清楚地表明缺少 "System.Text.Encoding.CodePages.dll",这就是导致问题的原因。所以看到这个后,我为 Encoding.CodePages 安装了 nuget 包,现在可以在输出目录中看到 .dll 文件,但是它对错误消息没有影响。

我感觉错误消息要么是转移注意力,要么 deps.json 文件有问题但我不明白。

也很高兴提供任何代码示例,但由于这似乎是一个部署问题,所以不确定它是否相关。

我设法让这个工作正常,但可能不一定找到上述方法不起作用的根源。

我关注了下面的文章,其中概述了如何通过网站和发布配置文件部署 dotnet 核心 webjobs。以这种方式发布 webjob 可以使其按预期启动和运行。

https://dotnetcoretutorials.com/2018/10/12/azure-webjobs-in-net-core-part-3

万一网站被关闭,这些是我必须遵循的基本步骤才能使其正常运行。

  1. 将 asp.net 核心网站添加到您的解决方案(空白模板)
  2. 将以下代码片段添加到您的新网站 csproj 文件(将 WebJobExample 更改为您的网络作业的名称和位置)
    <Target Name="PostpublishScript" AfterTargets="Publish">
      <Exec Command="dotnet publish ..\WebJobExamples.WebJobExample\ -o 
      $(PublishDir)App_Data\Jobs\continuous\WebJobExample"   />
    </Target>
  1. 从应用服务下载发布配置文件并使用 Web 部署部署应用程序(FTP 对我不起作用)

我之前在 .net 核心 web 作业中遇到过类似的问题。

这是我的解决方案:

创建.net core控制台项目并安装所有必要的nuget包后,确保webjob可以在本地运行。

然后右击项目->select发布->在发布弹出的window,select文件夹中选择路径(可以保持默认路径),然后点击发布按钮:

发布完成后,您可以进入您在上述步骤中定义的路径(默认路径如下:webjob_name\bin\Release\netcoreapp2.1\publish)。创建一个 run.cmd 文件,然后将类似 dotnet your_webjob_name.dll 的内容写入 run.cmd -> 然后将此处的所有文件发送到一个 .zip 文件中。

最后一步是导航到 azure 门户,上传 .zip 文件/配置 webjob 等