Entwickeln und Bereitstellen von WebJobs mit Visual Studio

In diesem Artikel wird erläutert, wie Sie Visual Studio zum Bereitstellen eines Konsolen-App-Projekts in einer Azure App Service-Web-App als Azure-WebJob verwenden. Weitere Informationen zum Bereitstellen von WebJobs über das Azure-Portal finden Sie unter Ausführen von Hintergrundaufgaben mit WebJobs in Azure App Service.

Sie können einen WebJob entwickeln, der entweder als .NET Core-App oder als .NET Framework-App ausgeführt wird. Mit Version 3.x des Azure WebJobs SDK können Sie Webaufträge entwickeln, die entweder als .NET Core- oder .NET Framework-Apps ausgeführt werden, während Version 2.x lediglich das .NET Framework unterstützt. Die Bereitstellung eines WebJobs-Projekts ist bei .NET Core- und .NET Framework-Projekten unterschiedlich.

Sie können mehrere WebJobs für eine einzelne Web-App veröffentlichen, sofern jeder WebJob in einer Web-App über einen eindeutigen Namen verfügt.

Webaufträge als .NET Core-Konsolenanwendung

Mit Version 3.x des Azure WebJobs SDKs können Sie WebJobs als .NET Core-Konsolen-Apps erstellen und veröffentlichen. Exemplarische Vorgehensweisen zum Erstellen und Veröffentlichen einer .NET Core-Konsolen-App in Azure als WebJob finden Sie unter Erste Schritte mit dem Azure WebJobs SDK für die ereignisgesteuerte Hintergrundverarbeitung.

Hinweis

.NET Core-Web-Apps und/oder .NET Core-WebJobs können nicht mit Webprojekten verknüpft werden. Wenn Sie Ihren Webauftrag mit einer Web-App bereitstellen müssen, erstellen Sie Ihre WebJobs als .NET Framework-Konsolen-App.

Bereitstellung in Azure App Service

Beim Veröffentlichen eines .NET Core-Webauftrags in Azure App Service über Visual Studio werden die gleichen Tools wie beim Veröffentlichen einer ASP.NET Core-App verwendet.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Veröffentlichen aus.

  2. Klicken Sie im Dialogfeld Veröffentlichen unter Ziel erst auf Azure und dann auf Weiter.

  3. Wählen Sie Azure WebJobs als Bestimmtes Ziel aus, und klicken Sie dann auf Weiter.

  4. Wählen Sie über den App Service Instanzen die Taste mit dem Pluszeichen ( + ) aus, um einen neuen Azure WebJob zu erstellen.

  5. Verwenden Sie im Dialogfeld App Service (Windows) die Hostingeinstellungen aus der folgenden Tabelle.

    Einstellung Vorgeschlagener Wert Beschreibung
    Name Global eindeutiger Name Name, der Ihre neue Funktions-App eindeutig identifiziert.
    Abonnement Auswählen Ihres Abonnements Das zu verwendende Azure-Abonnement.
    Ressourcengruppe myResourceGroup Der Name der Ressourcengruppe, in der Ihre Funktions-App erstellt werden soll. Wählen Sie Neu aus, um eine neue Ressourcengruppe zu erstellen.
    Hostingplan App Service-Plan Ein App Service-Plan gibt den Standort, die Größe und die Funktionen der Webserverfarm an, die Ihre App hostet. Beim Hosten mehrerer Apps können Sie Geld sparen, indem Sie die Web-Apps für die gemeinsame Verwendung eines einzelnen App Service-Plans konfigurieren. App Service-Pläne definieren Region, Instanzgröße, Skalierung und SKU (Free, Shared, Basic, Standard oder Premium). Wählen Sie New aus, um einen neuen App Service-Plan zu erstellen. Die kostenlosen und einfachen Ebenen unterstützen die Option „Always On“ nicht, damit Ihre Website kontinuierlich ausgeführt wird.

    Create App Service dialog box

  6. Klicken Sie auf Erstellen, um eine WebJob-Instanz und zugehörige Ressourcen in Azure mit diesen Einstellungen zu erstellen und Ihren Projektcode bereitzustellen.

  7. Wählen Sie Fertig stellen aus, um zur Seite Veröffentlichen zurückzukehren.

Webaufträge als .NET Framework-Konsolenanwendungen

Wenn Sie Visual Studio verwenden, um ein WebJobs-fähiges .NET Framework-Konsolen-App-Projekt bereitzustellen, werden Runtimedateien in den entsprechenden Ordner der Web-App kopiert (App_Data/jobs/continuous bei fortlaufenden WebJobs und App_Data/jobs/triggered bei geplanten oder bei Bedarf ausgeführten WebJobs).

Visual Studio fügt die folgenden Elemente zu einem WebJobs-fähigen Projekt hinzu:

Diagram showing what's added to a console app to enable deployment as a WebJob

Sie können diese Elemente zu einem vorhandenen Konsolen-App-Projekt hinzufügen oder eine Vorlage nutzen, um ein neues WebJobs-fähiges Konsolen-App-Projekt zu erstellen.

Stellen Sie ein Projekt als eigenständigen WebJob bereit, oder verknüpfen Sie es mit einem Webprojekt, damit es automatisch bereitgestellt wird, wenn Sie das Webprojekt bereitstellen. Zum Verknüpfen von Projekten fügt Visual Studio den Namen des webauftragsfähigen Projekts der Datei webjobs-list.json im Webprojekt hinzu.

Diagram showing WebJob project linking to web project

Voraussetzungen

Installieren von Visual Studio 2022 mit der Azure-Entwicklungsworkload.

Aktivieren der WebJobs-Bereitstellung für ein vorhandenes Konsolen-App-Projekt

Sie haben zwei Möglichkeiten:

  • Aktivieren der automatischen Bereitstellung mit einem Webprojekt.

    Konfigurieren Sie ein vorhandenes Konsolen-App-Projekt so, dass es automatisch als Webauftrag bereitgestellt wird, wenn Sie ein Webprojekt bereitstellen. Wählen Sie diese Option, wenn Sie Ihren Webauftrag in derselben Web-App ausführen möchten, in der die dazugehörige Webanwendung ausgeführt wird.

  • Ermöglichen der Bereitstellung ohne Webprojekt.

    Konfigurieren Sie ein vorhandenes Konsolen-App-Projekt, um es ohne Verknüpfung mit einem Webprojekt als eigenständigen WebJob bereitzustellen. Wählen Sie diese Option, wenn Sie einen Webauftrag eigenständig ausführen möchten, ohne dass eine Webanwendung in der Web-App ausgeführt wird. Dies empfiehlt sich, wenn Sie Ihre Webauftragsressourcen unabhängig von Ihren Webanwendungsressourcen skalieren möchten.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Webprojekt. Klicken Sie dann auf Hinzufügen>Vorhandenes Projekt als Azure WebJob.

    Existing Project as Azure WebJob

    Das Dialogfeld Azure-Webauftrag hinzufügen wird angezeigt.

  2. Wählen Sie in der Dropdownliste Projektname das Konsolen-App-Projekt aus, das als WebJob hinzugefügt werden soll.

    Selecting project in Add Azure WebJob dialog box

  3. Vervollständigen Sie das Dialogfeld Azure-WebJob hinzufügen, und klicken Sie dann auf OK.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Konsolen-App-Projekt, und wählen Sie dann Als Azure-WebJob veröffentlichen... aus.

    Publish as Azure WebJob

    Das Dialogfeld Azure-Webauftrag hinzufügen wird mit dem im Feld Projektname ausgewählten Projekt angezeigt.

  2. Vervollständigen Sie das Dialogfeld Azure-WebJob hinzufügen, und klicken Sie dann auf OK.

    Der Assistent Web veröffentlichen wird geöffnet. Wenn Sie keine sofortige Veröffentlichung wünschen, schließen Sie den Assistenten. Die eingegebenen Einstellungen werden für den Zeitpunkt der gewünschten Bereitstellung des Projektsgespeichert.

Erstellen eines neuen webauftragsfähigen Projekts

Verwenden Sie die Konsolen-App-Projektvorlage, und aktivieren Sie die WebJobs-Bereitstellung mithilfe der Anweisungen im vorherigen Abschnitt, um ein neues WebJobs-fähiges Projekt zu erstellen. Alternativ können Sie die Webauftragsvorlage "new-project" nutzen:

Hinweis

Die WebJobs-Vorlage „new-project“ installiert automatisch NuGet-Pakete und enthält in Program.cs Code für das WebJobs-SDK. Wenn Sie das WebJobs-SDK nicht verwenden möchten, entfernen oder ändern Sie die host.RunAndBlock-Anweisung in Program.cs.

  1. Klicken Sie auf Datei>Neu>Projekt. Suchen Sie im Dialogfeld Neues Projekt erstellen nach Azure WebJob (.NET Framework) für C#, und wählen Sie diese Option aus.

  2. Führen Sie die zuvor gezeigten Anweisungen aus, um das Konsolen-App-Projekt als unabhängiges WebJobs-Projekt zu erstellen.

  1. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Webprojekt, und klicken Sie dann auf Hinzufügen>Neues Azure WebJob-Projekt.

    New Azure WebJob Project menu entry

    Das Dialogfeld Azure-Webauftrag hinzufügen wird angezeigt.

  2. Vervollständigen Sie das Dialogfeld Azure-WebJob hinzufügen, und klicken Sie dann auf OK.

Die Datei „webjob-publish-settings.json“

Wenn Sie eine Konsolen.App für die WebJob-Bereitstellung konfigurieren, installiert Visual Studio das NuGet-Paket Microsoft.Web.WebJobs.Publish und speichert Zeitplanungsinformationen in der Datei webjob-publish-settings.json im Ordner Eigenschaften des WebJob-Projekts. Hier ist ein Beispiel dieser Datei:

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

Sie können diese Datei direkt bearbeiten, und Visual Studio stellt IntelliSense zur Verfügung. Das Dateischema wird unter https://schemastore.org gespeichert und kann dort angezeigt werden.

Die Datei „webjobs-list.json“

Wenn Sie ein WebJob-fähiges Projekt mit einem Webprojekt verknüpfen, speichert Visual Studio den Namen des WebJob-Projekts in der Datei webjobs-list.json im Ordner Eigenschaften des Webprojekts. Die Liste kann mehrere WebJobs-Projekte umfassen, wie im folgenden Beispiel gezeigt wird:

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

Diese Datei können Sie direkt in Visual Studio mit IntelliSense bearbeiten. Das Dateischema wird unter https://schemastore.org gespeichert.

Bereitstellen eines Webauftragsprojekts

Ein WebJobs-Projekt, das Sie mit einem Webprojekt verknüpft haben, wird automatisch mit dem Webprojekt bereitstellt. Informationen zur Bereitstellung von Webprojekten finden Sie unter Anleitungen>Bereitstellen der App im linken Navigationsbereich.

Klicken Sie zum Bereitstellen eines WebJobs-Projekts im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt. Klicken Sie dann auf Als Azure-WebJob veröffentlichen.

Publish as Azure WebJob

Bei einem unabhängigen Webauftrag wird derselbe Assistent Web veröffentlichen wie bei Webprojekten angezeigt, wobei allerdings weniger Einstellungen geändert werden können.

Dialogfeld „Azure-WebJob hinzufügen“

Im Dialogfeld Azure-WebJob hinzufügen können Sie den WebJob-Namen und die Einstellung des Ausführungsmodus für Ihren WebJob eingeben.

Add Azure WebJob dialog box

Einige der Felder in diesem Dialogfeld entsprechen Feldern im Dialogfeld WebJob hinzufügen des Azure-Portals. Weitere Informationen finden Sie unter Ausführen von Hintergrundaufgaben mit WebJobs in Azure App Service.

WebJob-Bereitstellungsinformationen:

  • Informationen zur Befehlszeilenbereitstellung finden Sie unter Aktivieren der befehlszeilengesteuerten oder kontinuierlichen Bereitstellung von Azure-Webaufträgen.

  • Wenn Sie einen WebJob bereitstellen und dann entscheiden, den Typ des WebJobs zu ändern und diesen erneut bereitzustellen, müssen Sie die Datei webjobs-publish-settings.json löschen. Dies führt dazu, dass Visual Studio die Veröffentlichungsoptionen erneut anzeigt, sodass Sie den Typ des WebJobs ändern können.

  • Wenn Sie einen Webauftrag bereitstellen und den Ausführungsmodus später von fortlaufend in nicht fortlaufend ändern oder umgekehrt, erstellt Visual Studio bei der erneuten Bereitstellung einen Webauftrag in Azure. Wenn Sie andere Planungseinstellungen ändern, aber den gleichen Ausführungsmodus verwenden oder zwischen einem geplanten und bedarfsgesteuerten Modus wechseln, aktualisiert Visual Studio den vorhandenen WebJob, anstatt einen neuen zu erstellen.

WebJob-Typen

Der Typ eines WebJobs kann entweder Ausgelöst oder Fortlaufend sein:

  • Ausgelöst (Standardtyp): Ein ausgelöster WebJob wird basierend auf einem Bindungsereignis, nach einem Zeitplan oder bei manuellem Auslösen (bedarfsgesteuert) gestartet. Er wird in einer einzelnen Instanz ausgeführt, in der die Web-App ausgeführt wird.

  • Fortlaufend: Ein fortlaufender WebJob wird sofort nach Erstellung des WebJobs gestartet. Er wird standardmäßig für alle skalierten Web-App-Instanzen ausgeführt, kann jedoch über settings.job so konfiguriert werden, dass er als einzelne Instanz ausgeführt wird.

Hinweis

Für eine Web-App kann nach 20 Minuten Inaktivität ein Timeout auftreten, und dieser Zeitgeber kann nur durch Anforderungen an die tatsächliche Web-App zurückgesetzt werden. Das Anzeigen der Konfiguration der App im Azure-Portal oder das Senden von Anforderungen an die Website mit erweiterten Tools (https://<app_name>.scm.azurewebsites.net) führt nicht zum Zurücksetzen des Zeitgebers. Wenn Sie für Ihre Web-App, die den Auftrag hostet, eine kontinuierliche oder zeitplanbasierte Ausführung festlegen oder ereignisgesteuerte Trigger verwenden, aktivieren Sie auf der Azure-Konfigurationsseite Ihrer Web-App die Einstellung Always On. Die Einstellung „Always On“ sorgt dafür, dass diese Arten von WebJobs zuverlässig ausgeführt werden. Dieses Feature steht nur in den Tarifen „Basic“, „Standard“ und „Premium“ zur Verfügung.

Planen eines ausgelösten Webauftrags

Wenn Sie eine Konsolen-App in Azure veröffentlichen, legt Visual Studio den Typ des WebJobs standardmäßig auf Ausgelöst fest und fügt die neue Datei settings.job zum Projekt hinzu. Sie können diese Datei für ausgelöste WebJobs verwenden, um einen Ausführungszeitplan für Ihren WebJob festzulegen.

Verwenden Sie die Datei settings.job, um einen Ausführungszeitplan für Ihren WebJob festzulegen. Beim folgenden Beispiel erfolgt die Ausführung stündlich von 9:00 Uhr bis 17:00 Uhr:

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

Diese Datei befindet sich im Stammverzeichnis des WebJobs-Ordners, der das Skript Ihres WebJobs enthält, z. B. wwwroot\app_data\jobs\triggered\{job name} oder wwwroot\app_data\jobs\continuous\{job name}. Wenn Sie einen WebJob aus Visual Studio bereitstellen, kennzeichnen Sie die Eigenschaften der Datei settings.job in Visual Studio mit Kopieren, falls aktueller.

Wenn Sie einen Webauftrag über das Azure-Portal erstellen, wird die Datei settings.job für Sie erstellt.

CRON-Ausdrücke

Azure WebJobs verwendet die gleichen CRON-Ausdrücke für Zeitpläne wie der Zeitgebertrigger in Azure Functions. Weitere Informationen zum CRON-Support finden Sie unter Trigger mit Timer für Azure Functions.

Hinweis

Die Standardzeitzone, die für die Ausführung von CRON-Ausdrücken verwendet wird, ist Coordinated Universal Time (UTC). Wenn Sie möchten, dass Ihr CRON-Ausdruck gemäß einer anderen Zeitzone ausgeführt wird, erstellen Sie eine App-Einstellung für Ihre Funktions-App mit dem Namen WEBSITE_TIME_ZONE. Weitere Informationen finden Sie unter NCRONTAB-Zeitzonen.

Referenz zu „settings.job“

Webaufträge unterstützen die folgenden Einstellungen:

Einstellung Typ Beschreibung
is_in_place All Diese Einstellung ermöglicht dem WebJob die direkte Ausführung, ohne dass er zunächst in einen temporären Ordner kopiert werden muss. Weitere Informationen finden Sie unter WebJob-Arbeitsverzeichnis.
is_singleton Fortlaufend Mit dieser Einstellung wird der WebJob nur in einer einzelnen Instanz ausgeführt, wenn aufskaliert wurde. Weitere Informationen finden Sie unter Festlegen eines fortlaufenden WebJobs als Singleton.
schedule Ausgelöst Der Webauftrag wird gemäß eines CRON-basierten Zeitplans ausgeführt. Weitere Informationen finden Sie unter NCRONTAB-Ausdrücke.
stopping_wait_time All Ermöglicht das Steuern des Verhaltens des Herunterfahrens. Weitere Informationen finden Sie unter Ordnungsgemäßes Herunterfahren.

Fortlaufende Ausführung

Wenn Sie Always On in Azure aktivieren, können Sie Visual Studio verwenden, um den WebJob so zu ändern, dass er fortlaufend ausgeführt wird:

  1. Wenn dies noch nicht erfolgt ist, veröffentlichen Sie das Projekt in Azure.

  2. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, und wählen Sie Veröffentlichen aus.

  3. Wählen Sie im Abschnitt Einstellungen die Option Alle Einstellungen anzeigen aus.

  4. Wählen Sie im Dialogfeld Profileinstellungen die Option Fortlaufend für WebJob-Typ aus, und klicken Sie dann auf Speichern.

    Publish Settings dialog box for a WebJob

  5. Klicken Sie auf der Registerkarte Veröffentlichen auf Veröffentlichen, um den WebJob mit den aktualisierten Einstellungen erneut zu veröffentlichen.

Nächste Schritte