使用 Visual Studio 開發和部署 WebJob

本發行項說明如何使用 Visual Studio 將主控台應用程式專案部署為 Azure App Service 中之 Web 應用程式的 Azure WebJob。 如需如何使用 Azure 入口網站部署 WebJob 的相關資訊,請參閱在 Azure App Service 中使用 WebJob 執行背景工作

您可以選擇開發以 .NET Core 應用程式.NET Framework 應用程式身份執行的 WebJob。 Azure WebJobs SDK 3.x 版,可讓您開發以 .NET Core 應用程式或 .NET Framework 應用程式身分執行的 WebJobs,而 2.x 版僅支援 .NET Framework。 針對 .NET Core 專案部署 WebJobs 專案的方式,和 .NET Framework 專案有所不同。

您可以將多個 WebJobs 發佈至單一 Web 應用程式,但前提是 Web 應用程式中的每個 WebJob 都有唯一名稱。

WebJobs 是 .NET Core 主控台應用程式

透過 Azure WebJobs SDK 3.x 版,您可以建立 WebJobs 並將其發佈為 .NET Core 主控台應用程式。 如需建立 .NET Core 主控台應用程式,並將其發佈至 Azure 以作為 WebJob 之逐步指示,請參閱開始透過 Azure WebJobs SDK 進行事件驅動背景處理

注意

.NET Core Web Apps 和/或 .NET Core WebJobs 無法連結至 Web 專案。 如果您需要使用 Web 應用程式部署 WebJob,請將 WebJobs 建立為 .NET Framework 主控台應用程式

部署到 Azure App Service

將 .NET Core WebJob 發佈至Visual Studio Azure App Service,會使用與發佈 ASP.NET Core 應用程式相同的工具。

  1. 在 [方案總管] 中,以滑鼠右鍵按一下專案並選取 [發佈]。

  2. 在 [發佈] 對話方塊中,針對 [目標] 選取 [Azure],然後再選取 [下一步]。

  3. 選取 [特定目標] 的 [Azure WebJobs],然後再選取 [下一步]。

  4. 上述 [App Service 執行個體]會選取加號 (+) 按鈕,以 [建立新的 Azure WebJob]。

  5. 在 [建立 App Service (Windows)] 對話方塊中,使用如下表中指定的主機設定。

    設定 建議的值 描述
    名稱 全域唯一的名稱 用以唯一識別新函式應用程式的名稱。
    訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。
    資源群組 myResourceGroup 要在其中建立函式應用程式的資源群組名稱。 選擇 [新增] 以建立新的資源群組。
    主控方案 App Service 方案 App Service 方案會指定用來裝載應用程式的 Web 伺服器陣列位置、大小和功能。 在裝載多個應用程式時,您可以將 Web 應用程式設定為共用單一 App Service 方案來節省開支。 App Service 方案會定義區域、執行個體大小、縮放計數,以及 SKU (免費、共用、基本、標準或進階)。 選擇 [新增] 以建立新的 App Service 方案。 免費和基本階層不支援可讓您網站持續執行的 Always On 選項。

    建立 App Service 對話方塊

  6. 選取 [建立],以在 Azure 中使用這些設定建立 WebJob 和相關資源,並且部署專案程式碼。

  7. 選取 [完成] 以返回 [發佈] 頁面。

WebJobs 是 .NET Framework 主控台應用程式

如果您使用 Visual Studio 部署已啟用 WebJobs 的 .NET Framework 主控台應用程式專案,其會將執行時間檔案複製到 Web 應用程式中的適當資料夾 (連續 WebJobs 的 App_Data/jobs/continuous,以及已排程或隨需 WebJobs 的 App_Data/jobs/triggered)。

Visual Studio 會將下列項目新增至已啟用 WebJobs 的專案中:

此圖顯示在主控台應用程式中新增了何種項目以啟用 WebJob 形式的部署

您可以將這些項目新增至現有的主控台應用程式專案,或使用範本建立具有 WebJobs 功能的新主控台應用程式專案。

以 WebJob 的方式自我部署專案,或將專案連結到 Web 專案,因此每當您要部署 Web 專案時,專案便會自動部署。 若要連結專案,Visual Studio 會在 Web 專案的 webjobs-list.json 檔案中加上具有 WebJobs 功能的專案名稱。

Diagram showing WebJob project linking to web project

先決條件

透過 Azure 開發工作負載安裝 Visual Studio 2022。

啟用現有主控台應用程式專案的 WebJobs 部署

您有兩個選擇:

  • 透過 Web 專案啟用自動部署

    設定現有主控台應用程式專案,以便在您部署 Web 專案時,其會以 WebJob 的方式自動部署。 當您要在與執行相關 Web 應用程式相同的 Web 應用程式中執行 WebJob 時,請使用此選項。

  • 不透過 Web 專案啟用部署

    設定現有主控台應用程式專案以 WebJob 的方式自我部署,且不具 Web 專案的連結。 當您要在 Web 應用程式中讓應用程式自行執行 WebJob,且 Web 應用程式中沒有正在執行的 Web 應用程式時,請使用此選項。 為了調整不受 Web 應用程式資源影響的 WebJob 資源,您可能會想執行此動作。

  1. 以滑鼠右鍵按一下 [方案總管] 中的 Web 專案,然後依序選取 [新增]>[現有專案為 Azure WebJob]。

    Existing Project as Azure WebJob

    [Add Azure WebJob] 對話方塊隨即出現。

  2. 在 [專案名稱] 下拉式清單中,選取要新增為 WebJob 的主控台應用程式專案。

    在 [新增 Azure WebJob] 對話方塊中選取專案

  3. 完成 [Add Azure WebJob] 對話方塊,然後選取 [確定]。

  1. 以滑鼠右鍵按一下 [方案總管] 中的主控台應用程式專案,然後選取 [發行為 Azure WebJob]。

    發行為 Azure WebJob

    [加入 Azure WebJob] 對話方塊隨即出現,而且 [專案名稱] 方塊中已選取此專案。

  2. 完成 [Add Azure WebJob] 對話方塊,然後選取 [確定]。

    此時會出現 [發行 Web] 精靈。 如果您不打算立即發行,請關閉精靈。 您所輸入的設定會被儲存下來,以供部署專案時使用。

建立具有 WebJobs 功能的新專案

若要建立具有 WebJobs 功能的新專案,請使用主控台應用程式專案範本,並如上一節中所述來啟用 WebJobs 部署。 另一種方式是,您可以使用 WebJobs 新專案範本:

  • 在獨立的 WebJob 中使用 WebJobs 新專案範本

    建立專案,並將專案設定為以 WebJob 的方式自我部署,且不具 Web 專案的連結。 當您要在 Web 應用程式中讓應用程式自行執行 WebJob,且 Web 應用程式中沒有正在執行的 Web 應用程式時,請使用此選項。 為了調整不受 Web 應用程式資源影響的 WebJob 資源,您可能會想執行此動作。

  • 在連結至 Web 專案的 WebJob 中使用 WebJobs 新專案範本

    建立專案,並設定在針對位於相同解決方案中的 Web 專案進行部署時,會自動以 WebJob 的方式部署此專案。 當您要在與執行相關 Web 應用程式相同的 Web 應用程式中執行 WebJob 時,請使用此選項。

注意

WebJobs 新專案範本自動安裝 NuGet 套件,並包括適用於 WebJobs SDKProgram.cs程式碼。 如果您不想使用 WebJobs SDK,請移除或變更 Program.cs 中的 host.RunAndBlock 陳述式。

  1. 選取 [File] \(檔案\)> [New] \(新增\)> [Project] \(專案\)。 在 [建立新專案] 對話方塊中,搜尋並選取 [Azure WebJob (.NET Framework)] 作為 C#。

  2. 請依照之前的指示,將主控台應用程式專案設定成獨立的 WebJobs 專案

  1. 以滑鼠右鍵按一下 [方案總管] 中的 Web 專案,然後選取 [新增]>[新 Azure WebJob 專案]。

    New Azure WebJob Project menu entry

    [Add Azure WebJob] 對話方塊隨即出現。

  2. 完成 [Add Azure WebJob] 對話方塊,然後選取 [確定]。

webjob-publish-settings.json 檔案

設定 WebJobs 部署的主控台應用程式時,Visual Studio 會安裝 Microsoft.Web.WebJobs.Publish NuGet 封裝,並將排程資訊儲存在 WebJobs 專案中專案 Properties 資料夾的 webjob-publish-settings.json 檔案。 以下是該檔案的範例:

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "WebJob1",
  "startTime": "null",
  "endTime": "null",
  "jobRecurrenceFrequency": "null",
  "interval": null,
  "runMode": "Continuous"
}

您可以編輯此檔案目錄,而 Visual Studio 會提供 IntelliSense。 檔案結構描述會儲存在 https://schemastore.org,您可以在該處進行檢視。

webjobs-list.json 檔案

當您將具有 WebJobs 功能的專案連結到 Web 專案時,Visual Studio 會將 WebJobs 專案的名稱儲存在 Web 專案中 Properties 資料夾的 webjobs-list.json 檔案。 此清單可能包含多個 WebJobs 專案,如下列範例所示:

{
  "$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
  "WebJobs": [
    {
      "filePath": "../ConsoleApplication1/ConsoleApplication1.csproj"
    },
    {
      "filePath": "../WebJob1/WebJob1.csproj"
    }
  ]
}

您可以直接在 Visual Studio 中,透過 IntelliSense 編輯此檔案目錄。 檔案結構描述儲存在 https://schemastore.org

部署 WebJobs 專案

已連結到 Web 專案的 WebJobs 專案,會透過 Web 專案自動部署。 如需 Web 專案部署的相關資訊,請參閱左邊功能窗格的使用說明指南>部署應用程式

若要自我部署 WebJobs 專案,請以滑鼠右鍵按一下 [方案總管] 中的專案,然後選取 [發行為 Azure WebJob]。

發行為 Azure WebJob

若是獨立的 WebJob,則 Web 專案所使用的相同 [發行 Web] 精靈隨即出現,但其中幾個設定可以變更。

新增 Azure WebJob 對話方塊

新增 Azure WebJob 對話方塊可讓您輸入 WebJob 名稱和 WebJob 的執行模式設定。

新增 Azure WebJob 對話方塊

此對話方塊中的某些欄位會對應至 Azure 入口網站中新增 WebJob對話方塊上的欄位。 如需詳細資訊,請參閱在 Azure App Service 中使用 WebJob 執行背景工作

WebJob 部署資訊:

  • 如需命令列部署的詳細資訊,請參閱啟用 Azure WebJobs 的命令列或連續傳遞

  • 如果您部署了 WebJob,但之後決定變更 WebJob 的類型並重新部署,請刪除 webjobs-publish-settings.json 檔案。 由於這樣做會讓 Visual Studio 重新顯示發佈選項,因此您可以變更 WebJob 的類型。

  • 如果部署 WebJob,並在稍後將執行模式從連續變更為非連續 (或相反情形),則在您重新部署時,Visual Studio 會在 Azure 中建立新的 WebJob。 如果您變更其他排程設定但保持執行模式不變,或在排程和隨選模式之間切換,則 Visual Studio 會更新現有的工作,而非建立新的工作。

WebJob 類型

WebJob 的類型可以為觸發連續

  • 觸發 (預設):觸發的 WebJob 會根據繫結事件、依排程,或手動觸發 WebJob 開始 (視需要)。 其會在 Web 應用程式執行的單一執行個體上執行。

  • 連續:建立 WebJob 時,會立即啟動連續的 WebJob。 依預設,其會於所有 Web 應用程式縮放執行個體上執行,但可設定成透過 settings.job,並以單一執行個體的形式執行。

注意

Web 應用程式會在閒置超過 20 分鐘後逾時,而且只有針對實際 Web 應用程式的要求,才可重設計時器。 在 Azure 入口網站中檢視應用程式的組態,或者對進階工具網站 (https://<app_name>.scm.azurewebsites.net) 提出要求,並不會重設計時器。 如果您設定裝載工作的 Web 應用程式為持續執行、依排程執行或使用事件驅動觸發程序,請在 Web 應用程式的 Azure [設定] 頁面上啟用 [一律開啟] 設定。 [一律開啟] 設定有助於確保這些類型的 WebJobs 得以可靠地執行。 這項功能僅適用於基本、標準和進階定價層

排程觸發式 WebJob

當您將主控台應用程式發佈至 Azure 時,Visual Studio 會依預設,將 WebJob 的類型設定為 [已觸發],並新增新的 [settings.job]檔案至專案中。 針對已觸發的 WebJob 類型,您可以使用此檔案設定 WebJob 的執行排程。

使用 settings.job 檔案設定 WebJob 的執行排程。 下列範例會從上午 9 點到下午 5 點,每小時便執行一次:

{
    "schedule": "0 0 9-17 * * *"
}

此檔案位於具有 WebJob 指令碼的 WebJobs 資料夾根目錄,例如 wwwroot\app_data\jobs\triggered\{job name}wwwroot\app_data\jobs\continuous\{job name}。 當您從 Visual Studio 部署 WebJob 時,請將您 Visual Studio 中的 [settings.job] 檔案屬性標示為 [有更新時才複製]。

如果您從 Azure 入口網站建立 WebJob,則會為您建立 settings.job 檔案。

CRON 運算式

WebJobs 會使用與 Azure Functions 中的計時器觸發程式相同的 CRON 運算式,進行排程。 若要深入了解 CRON 支援的相關詳細資訊,請參閱 Azure Functions 的計時器觸發程序

注意

用來執行 CRON 運算式的預設時區是國際標準時間 (UTC)。 若要讓 CRON 運算式以另一個時區為基礎,請為名為 WEBSITE_TIME_ZONE 的函式應用程式建立應用程式設定。 若要深入了解,請參閱 NCRONTAB 時區

settings.job 參考

可由 WebJob 支援的設定如下:

設定 型別 說明
is_in_place All 允許 WebJob 就地執行,而不需要先複製到暫存資料夾。 如需詳細資訊,請參閱 WebJob 工作目錄
is_singleton 連續 只有在擴增時,才會在單一執行個體上執行 WebJob。如需詳細資訊,請參閱將連續作業設定為單一資料庫
schedule 觸發 以 CRON 為基礎的排程,執行 WebJob。 如需詳細資訊,請參閱 NCRONTAB 運算式
stopping_wait_time All 允許控制關機行為。 如需詳細資訊,請參閱正常關機

連續執行

如果您在 Azure 中啟用 [一律開啟],您可以使用 Visual Studio 變更 WebJob,以持續執行:

  1. 如果您尚未這麼做,請將專案發佈至 Azure

  2. 在 [方案總管] 中,以滑鼠右鍵按一下專案並選取 [發佈]。

  3. 在 [設定] 區段中,選擇 [顯示所有設定]。

  4. 在 [設定檔設定] 對話方塊中,針對 [WebJob 類型] 選擇 [連續],然後再選擇 [儲存]。

    WebJob 的 [發佈設定] 對話方塊

  5. 在 [發佈] 索引標籤中選取 [發佈] ,以使用更新的設定重新發佈 WebJob。

後續步驟