如何在 recycle/restart WebApp 之后使用 TimeTrigger 自动启动 Azure WebJob

How to automatically start Azure WebJob with TimeTrigger after recycle/restart WebApp

我正在 Azure WebApp 中使用 WebJob。作业执行一个方法:

public static void ProcessQueue(
            [TimerTrigger("00:02:00")] TimerInfo timerInfo,
            [Queue("queue")] CloudQueue queue,
            [Table("processing")] CloudTable processingTable,
            TextWriter log)
{
    // do sth...
}

TimeTrigger 选项来自 Microsoft.Azure.WebJobs.Extensions

我在 "always on" mode 中将 WebApp 设置为 运行。

但是如果我正在重新启动或更改应用程序设置,WebApp 是否可能在内部进行回收?我认为。

因为在此之后我收到以下错误:

[11/10/2016 08:22:24 > 36d12e: SYS ERR ] WebJob run failed due to: System.Threading.ThreadAbortException: Thread was being aborted. at Kudu.Core.Jobs.BaseJobRunner.RunJobInstance(JobBase job, IJobLogger logger, String runId, String trigger, ITracer tracer, Int32 port) at Kudu.Core.Jobs.TriggeredJobRunner.<>c__DisplayClass10_1.b__0(Object _)

所以我尝试在 WebJob 上设置一个时间表,我还尝试在目录中粘贴一个 CRON 时间表,但没有任何帮助我在 reset/recycle 之后将作业带到 "running"。

更新 1
我的exe的内容(Main())

JobHostConfiguration config = new JobHostConfiguration();
config.Tracing.ConsoleLevel = TraceLevel.Verbose;
config.Queues.MaxDequeueCount = 10;
config.UseCore();
config.UseTimers();
var host = new JobHost(config);
host.RunAndBlock();

更新 2
如果我在 Azure 门户中手动连续部署,一切都会按预期 运行ning(感谢 mathewc)。但这是一个手动步骤;)。我处于 DevOps 场景中,所有内容都将由 Visual Studio Team Services 构建、创建和部署,并且您无法设置任何选项来部署 作业作为连续.

根据您显示的调用堆栈,您可能错误地将作业部署为 触发 而不是 连续 网络工作?使用 WebJobs SDK 时,您应该按照 here.

所述连续部署 WebJobs

一旦 运行在连续模式下,您是正确的,如果您更改应用程序设置或以其他方式导致重新启动,您的 WebJobs 也将重新启动。但是,TimerTrigger 的内部调度程序将确保作业在恢复时继续按计划 运行。