WebJobs 是一項 Azure App Service 功能,可讓您在與 Web 應用程式、API 應用程式或行動應用程式相同的內容中執行程式或指令碼。
使用 WebJob 不會產生額外的費用。
在寫一些專案時,我們偶爾會寫一些 console app 做一些排程處理,
而 WebJob 在 Microsoft Azure 的服務中,即擔任這個角色為我們負責背景執行的工作。
本篇文章紀錄了如何在已有建立應用程式服務中建立一個觸發式的 WebJob 服務。
專案準備
1. 開啟 VS 並新增一個 Console Application。
2. 開啟 NuGet 並為專案加入Microsoft.ApplicationInsights 套件。
3. 複製你的 Application Insights 檢測金鑰以供稍後使用。

4. 將Program.cs中的Main方法區塊修改如下:
using System.Threading.Tasks;
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Extensibility;
namespace DemoAzureConsoleApp
{
/// <summary>
/// Program
/// </summary>
internal class Program
{
/// <summary>
/// Defines the entry point of the application.
/// </summary>
/// <param name="args">The arguments.</param>
private static void Main(string[] args)
{
TelemetryConfiguration.Active.InstrumentationKey = "{你的檢測金鑰}";
var telemetryClient = new TelemetryClient();
telemetryClient.TrackTrace("Hello World!");
// before exit, flush the remaining data
telemetryClient.Flush();
// flush is not blocking so wait a bit
Task.Delay(5000).Wait();
}
}
}
4. 將專案建置起來,並將建置好的專案壓縮成 .zip 資料。

新增Web工作
1. 在自有的應用程式服務裡新增一個 WebJob。

2. 填入相關欄位設定。

- 名稱:
輸入自訂的名稱。 - 檔案上傳:
將建置好的檔案(如:bin/Release)壓縮成 zip 檔案後選擇並上傳。 - 類型:
1. 連續:建立 WebJob 時立即啟動。 為了避免結束作業,程式或指令碼通常會在無限迴圈中執行其工作。 如果作業結束,您可以重新啟動。
2. 觸發式:依照手動執行或者撰寫 CRON 運算式依照設定時間執行。 - 縮放:(當類型為"連續"時的延伸選項)
1. 多重執行個體:在 Web 應用程式執行所在的所有執行個體上執行。
2. 單一執行個體:只會讓你的 WebJob 在單一複本執行,不論 App Service 方案執行個體計數為何。 - 觸發程序:(當類型為"觸發式"時的延伸選項)
1. 排程:依照 CRON 運算式決定觸發的週期
2. 手動:需手動在 Azure 上執行 - CRON 運算式:(當類型為
觸發式且觸發程序為排程時的延伸選項)
必須填入設計好的 CRON 運算式。
這裡為了方便觀察我們其設定為:0 */1 * * * *(即每分鐘執行一次)。
如我們有使用 Scale Out 時,連續式且設定為多重執行個體的 WebJob 會在多個不同的實體上幫我們運行。
可以理解為你這個 Schedule 會在多台機器上同時跑...
如果只想在一個實體上執行的話,縮放項目切記要更改為"單一執行個體"。
如果為觸發式 WebJob 時,則僅會在隨機選擇的實例上運行。
3. 點擊確定並等待 Azure 部屬完成。
4. 如果你原本的應用程式不是保持開啟的,Azure 會建議你開啟「Always on」設定以確保 WebJob 正常運作。我們可以透過上方的按鈕開啟它,或者到應用程式設定裡自行手動開啟一律開啟選項。

5. 靜待一段時間後,即可在我們的 Application Insights 上看到資訊了。

6. 測試完畢後如果要刪除 WebJob 的話,只要到Web 工作裡點選你要刪除的工作並選擇刪除即可。

由 VS 發行 WebJob 至 Azure 上
我們除了在 Azure 的後台自行發行 WebJob 外,也可以在 VS 上直接操作發行。
1. 為你的專案根目錄上加入一個JSON 結構描述檔案並將其命名為settings.job。編輯該檔案如下:
{
"schedule": "0 */1 * * * *"
}
2. 將你的settings.job檔案屬性中的複製到輸出目錄屬性修改為:有更新才複製。
3. 在你的專案上點選右鍵後,選擇發行為 Azure WebJob。

4. 填入你的 WebJob 名稱與選擇 WebJob 執行模式。

5. 選擇發行目標:點擊Microsoft Azure App Service選項。

6. 依序選擇你的帳戶及應用程式服務後按確定。

7. 點擊發行按鈕並等待發行完成。
8. 重新回到你的 Azure Web 工作查看發行結果並觀察 Application Insights 驗證成果。
參考:
在 Azure App Service 中使用 WebJob 執行背景工作
使用 Visual Studio 開發和部署 WebJob - Azure App Service