2015-12-21 75 views
5

這是我第一次完成WebJob類型的應用程序。我創建了一個webjob項目,並在解決方案中提供Program.csFunction.csAzure WebJob最佳方法

我已經刪除了Function.cs因爲在這個項目中沒有隊列我會從中獲取數據。

現在Program.cs已經有主方法如下所示:

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")); 
} 

or this one?

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(); 
} 
+0

所以它將成爲第一個直接調用supportservice的代碼。 但我已閱讀MSDN中提供的SDK,我真的無法從中理解任何內容。你推薦任何有關JobHost類和屬性和功能的文檔嗎?什麼時候我應該使用他們中的每一個人,每個人的最佳做法是什麼? –

+0

是的,我會使用您建議的第一個代碼.SDK在將Azure存儲作爲一組觸發器和數據流公開方面做得非常出色;在這種情況下,主持人具有「無限循環」的作用。 – benjguin

1

由模板創建的WebJob使用WebJobs SDK。如果您不需要使用SDK的任何功能,那麼您可以創建一個控制檯應用程序並設置一個CRON計劃以運行它(請參閱「計劃作業」here)。

我鏈接到上面的WebJobs SDK的更多信息。除了爲想要觸發隊列/ blob等功能的場景提供便利之外,它還可以通過TimerTriggerSDK extensions的一部分)按計劃運行作業。閱讀這些材料,看看最適合您的需求。