这是我第一次使用WebJob类型的应用程序。我创建了一个webjob项目,在解决方案中它附带Program.cs
和Function.cs
。
我已经删除了Function.cs
,因为在这个项目中没有我将从中获取数据的队列。
现在在Program.cs
中已有Main Method,如下所示:
class Program
{
// Please set the following connection strings in app.config for this WebJob to run:
// AzureWebJobsDashboard and AzureWebJobsStorage
static void Main()
{
var host = new JobHost();
// The following code ensures that the WebJob will be running continuously
host.RunAndBlock();
}
}
据我了解,RunAndBlock
是连续运行webjob,但我希望这项工作只运行一次。我想按计划从外部控制执行。我想知道如何让我的代码只运行一次?
如下所示,我有一个SupportService
类RunOnePoolProvisioingCycle
,我只想调用此方法一次。
这是正确的做法吗?
static void Main()
{
SupportService _supportService = new SupportService();
_supportService.Initialize();
_supportService.SetPoolProvisioningConfigurations();
_supportService.RunOnePoolProvisioningCycle();
}
还是这个?
static void Main()
{
var host = new JobHost();
SupportService _supportService = new SupportService();
_supportService.Initialize();
_supportService.SetPoolProvisioningConfigurations();
host.Call(typeof(SupportService).GetMethod("SetPoolProvisioningConfigurations"));
}
还是这个?
static void Main()
{
var host = new JobHost();
SupportService _supportService = new SupportService();
_supportService.Initialize();
_supportService.SetPoolProvisioningConfigurations();
host.CallAsync(typeof(SupportService).GetMethod("SetPoolProvisioningConfigurations"));
}
或者我应该使用:
host.Start()
或
host.StartAsync()?
答案 0 :(得分:4)
您看到的是SDK的一部分,它是可选的。 webjob可以像您按原样Zip,上传和运行的控制台应用程序一样简单。
因此,在您的情况下,此代码似乎是最佳选择:
static void Main()
{
SupportService _supportService = new SupportService();
_supportService.Initialize();
_supportService.SetPoolProvisioningConfigurations();
_supportService.RunOnePoolProvisioningCycle();
}
答案 1 :(得分:1)
模板创建的WebJob使用WebJobs SDK。如果您不需要使用SDK的任何功能,那么您只需创建一个控制台应用并设置 CRON计划即可运行它(请参阅"预定工作" here)。
我链接到上面有关WebJobs SDK的更多信息。除了便于在队列/ blob /等上触发功能的场景之外,它还能够通过 TimerTrigger (SDK extensions的一部分)按计划运行作业。阅读这些材料以了解哪种材料最适合您的需求。