Azure WebJob最佳方法

时间:2015-12-21 14:32:56

标签: c# azure azure-webjobs azure-webjobssdk

这是我第一次使用WebJob类型的应用程序。我创建了一个webjob项目,在解决方案中它附带Program.csFunction.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,但我希望这项工作只运行一次。我想按计划从外部控制执行。我想知道如何让我的代码只运行一次? 如下所示,我有一个SupportServiceRunOnePoolProvisioingCycle,我只想调用此方法一次。 这是正确的做法吗?

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()?

2 个答案:

答案 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的一部分)按计划运行作业。阅读这些材料以了解哪种材料最适合您的需求。