2016-11-10 74 views
0

我在Azure WebApp中使用WebJob。该作业执行的方法:如何在回收/重新启动后使用TimeTrigger自动启动Azure WebJob WebApp

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

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

但是,如果我正在重新启动或更改应用程序设置,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时间表,但没有任何帮助我出去把重置/回收后的工作“运行”。

更新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的门户网站都手动部署为连续运行的预期(感谢mathewc)。但这是手动步骤;)。我处于DevOps场景中,所有内容都将由Visual Studio团队服务构建,创建和部署,您无法设置任何选项将作业部署为连续作业

+0

你还可以分享你的exe启动代码,所以我可以看到你是否正确启动WebJobs SDK JobHost? – mathewc

+0

@mathewc:已添加为Update1 – Martin

回答

1

基于你已经证明调用堆栈上,它看起来像你可能没有正确地部署自己的工作为触发而不是连续 WebJob?使用WebJobs SDK时,应按照here所述的方式将WebJobs部署为连续的。

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

+0

谢谢。更新我的问题。此手动步骤正在运行... – Martin

+1

请参阅[本页](https://blogs.msdn.microsoft.com/tfssetup/2016/05/18/deploying-and-schedule-azure-webjobs-from-vsts-to -azure-web-app-with-bonus-cron-scheduling /)了解有关设置自动VSTS部署的详细信息。该页面部署了一个OnDemand,但如果您选择连续,您将获得所需的内容。 – mathewc

+0

听起来像个好主意。之前找到了这个页面,但在Visual Studio发布中本地配置调度程序并不奇怪,然后这个配置将用于通过vsts进行部署? – Martin

相关问题