Webjobs ontwikkelen en implementeren met Visual Studio
In dit artikel wordt uitgelegd hoe u Visual Studio gebruikt om een console-app-project te implementeren in een web-app in Azure App Service als een Azure-webtaak. Zie Achtergrondtaken uitvoeren met webtaken in Azure App Service voor informatie over het implementeren van webtaken met behulp van de Azure Portal.
U kunt ervoor kiezen om een webtaak te ontwikkelen die wordt uitgevoerd als een .NET Core-app of een .NET Framework-app. Met versie 3.x van de Azure WebJobs SDK kunt u webtaken ontwikkelen die worden uitgevoerd als .NET Core-apps of .NET Framework-apps, terwijl versie 2.x alleen de .NET Framework ondersteunt. De manier waarop u een WebJobs-project implementeert, is anders voor .NET Core-projecten dan voor .NET Framework-projecten.
U kunt meerdere webtaken publiceren naar één web-app, mits elke webtaak in een web-app een unieke naam heeft.
WebJobs als .NET Core-console-apps
Met versie 3.x van de Azure WebJobs SDK kunt u WebJobs maken en publiceren als .NET Core-console-apps. Zie Aan de slag met de Azure WebJobs SDK voor gebeurtenisgestuurde achtergrondverwerking voor stapsgewijze instructies voor het maken en publiceren van een .NET Core-console-app naar Azure als een webtaak.
Notitie
.NET Core Web Apps en/of .NET Core WebJobs kunnen niet worden gekoppeld aan webprojecten. Als u uw webtaak wilt implementeren met een web-app, maakt u uw webtaken als een .NET Framework console-app.
Implementeren naar Azure App Service
Het publiceren van een .NET Core-webtaak naar Azure App Service vanuit Visual Studio gebruikt dezelfde hulpprogramma's als het publiceren van een ASP.NET Core-app.
Klik in Solution Explorer met de rechtermuisknop op het project en selecteer Publiceren.
Selecteer in het dialoogvenster Publiceren de optie Azure for Target en selecteer vervolgens Volgende.
Selecteer Azure WebJobs voor Specifiek doel en selecteer vervolgens Volgende.
Selecteer boven App Service exemplaren de plusknop (+) om een nieuwe Azure-webtaak te maken.
Gebruik in het dialoogvenster App Service (Windows) de hostinginstellingen in de volgende tabel.
Instelling Voorgestelde waarde Beschrijving Naam Wereldwijd unieke naam Naam waarmee uw nieuwe functie-app uniek wordt aangeduid. Abonnement Kies uw abonnement Het te gebruiken Azure-abonnement. Resourcegroep myResourceGroup Naam van de resourcegroep waarin uw functie-app moet worden gemaakt. Kies Nieuw om een nieuwe resourcegroep te maken. Hostingabonnement App Service-plan Een App Service-plan geeft de locatie, de grootte en de functies van de webserverfarm aan die als host fungeert voor uw app. U kunt geld besparen bij het hosten van meerdere apps door de web-apps te configureren voor het delen van één App Service-plan. App Service plannen definiëren de regio, de grootte van het exemplaar, het schaalaantal en de SKU (Gratis, Gedeeld, Basic, Standard of Premium). Kies Nieuw om een nieuw App Service-plan te maken. De gratis en Basic-lagen bieden geen ondersteuning voor de optie AlwaysOn om uw site continu te laten werken. Selecteer Maken om een webtaak en gerelateerde resources in Azure te maken met deze instellingen en uw projectcode te implementeren.
Selecteer Voltooien om terug te keren naar de pagina Publiceren .
WebJobs als .NET Framework console-apps
Als u Visual Studio gebruikt om een .NET Framework-console-app-project met webtaken te implementeren, worden runtimebestanden gekopieerd naar de juiste map in de web-app (App_Data/jobs/continuous voor continue webtaken en App_Data/jobs/geactiveerd voor geplande of on-demand webtaken).
Visual Studio voegt de volgende items toe aan een project waarvoor WebJobs is ingeschakeld:
- Het NuGet-pakket Microsoft.Web.WebJobs.Publish .
- Een webjob-publish-settings.json-bestand dat implementatie- en scheduler-instellingen bevat.
U kunt deze items toevoegen aan een bestaand console-app-project of een sjabloon gebruiken om een nieuw console-app-project met WebJobs te maken.
Implementeer een project zelf als een webtaak of koppel het aan een webproject, zodat het automatisch wordt geïmplementeerd wanneer u het webproject implementeert. Als u projecten wilt koppelen, neemt Visual Studio de naam op van het webtaakproject in een webjobs-list.json-bestand in het webproject.
Vereisten
Installeer Visual Studio 2022 met de Azure-ontwikkelworkload.
WebJobs-implementatie inschakelen voor een bestaand console-app-project
U hebt hiervoor twee opties:
Automatische implementatie met een webproject inschakelen.
Configureer een bestaand console-app-project zodat het automatisch als een webtaak wordt geïmplementeerd wanneer u een webproject implementeert. Gebruik deze optie als u uw webtaak wilt uitvoeren in dezelfde web-app waarin u de gerelateerde webtoepassing uitvoert.
Implementatie zonder webproject inschakelen.
Configureer een bestaand console-app-project om zelf als een webtaak te implementeren, zonder een koppeling naar een webproject. Gebruik deze optie als u een webtaak zelf in een web-app wilt uitvoeren, zonder dat er in de web-app een webtoepassing wordt uitgevoerd. U kunt dit doen om uw webtaakresources onafhankelijk van uw webtoepassingsresources te schalen.
Automatische webtakenimplementatie inschakelen met een webproject
Klik met de rechtermuisknop op het webproject in Solution Explorer en selecteer vervolgens Bestaand project toevoegen>als Azure-webtaak.
Het dialoogvenster Azure-webtaak toevoegen wordt weergegeven.
Selecteer in de vervolgkeuzelijst Projectnaam het console-app-project dat u wilt toevoegen als een webtaak.
Voltooi het dialoogvenster Azure-webtaak toevoegen en selecteer VERVOLGENS OK.
WebJobs-implementatie zonder webproject inschakelen
Klik met de rechtermuisknop op het console-app-project in Solution Explorer en selecteer vervolgens Publiceren als Azure-webtaak.
Het dialoogvenster Azure-webtaak toevoegen wordt weergegeven, waarbij het project is geselecteerd in het vak Projectnaam .
Voltooi het dialoogvenster Azure-webtaak toevoegen en selecteer VERVOLGENS OK.
De wizard Web publiceren wordt weergegeven. Als u niet onmiddellijk wilt publiceren, sluit u de wizard. De instellingen die u hebt ingevoerd, worden opgeslagen voor wanneer u het project wilt implementeren.
Een nieuw project met WebJobs maken
Als u een nieuw project met WebJobs wilt maken, gebruikt u de projectsjabloon van de console-app en schakelt u de implementatie van WebJobs in, zoals uitgelegd in de vorige sectie. Als alternatief kunt u de sjabloon WebJobs new-project gebruiken:
De sjabloon WebJobs new-project gebruiken voor een onafhankelijke webtaak
Maak een project en configureer het zo dat het zelfstandig als een webtaak wordt geïmplementeerd, zonder koppeling naar een webproject. Gebruik deze optie als u een webtaak zelf in een web-app wilt uitvoeren, zonder dat er in de web-app een webtoepassing wordt uitgevoerd. U kunt dit doen om uw webtaakresources onafhankelijk van uw webtoepassingsresources te schalen.
De sjabloon WebJobs new-project gebruiken voor een webtaak die is gekoppeld aan een webproject
Maak een project dat is geconfigureerd om automatisch als een webtaak te implementeren wanneer u een webproject in dezelfde oplossing implementeert. Gebruik deze optie als u uw webtaak wilt uitvoeren in dezelfde web-app waarin u de gerelateerde webtoepassing uitvoert.
Notitie
Met de nieuwe projectsjabloon WebJobs worden automatisch NuGet-pakketten geïnstalleerd en code opgenomen in Program.cs voor de WebJobs SDK. Als u de WebJobs SDK niet wilt gebruiken, verwijdert u de instructie in Program.cs of wijzigt u dezehost.RunAndBlock
.
De sjabloon WebJobs new-project gebruiken voor een onafhankelijke webtaak
Selecteer Bestand>Nieuw>Project. In het dialoogvenster Een nieuw project maken zoekt en selecteert u Azure WebJob (.NET Framework) voor C#.
Volg de vorige aanwijzingen om van het console-app-project een onafhankelijk WebJobs-project te maken.
De sjabloon WebJobs new-project gebruiken voor een webtaak die is gekoppeld aan een webproject
Klik met de rechtermuisknop op het webproject in Solution Explorer en selecteer vervolgensNieuw Azure-webtaakprojecttoevoegen>.
Het dialoogvenster Azure-webtaak toevoegen wordt weergegeven.
Voltooi het dialoogvenster Azure-webtaak toevoegen en selecteer VERVOLGENS OK.
bestand webjob-publish-settings.json
Wanneer u een console-app configureert voor de implementatie van WebJobs, installeert Visual Studio het NuGet-pakket Microsoft.Web.WebJobs.Publish en slaat u planningsgegevens op in een webjob-publish-settings.json-bestand in de map Projecteigenschappen van het WebJobs-project. Hier volgt een voorbeeld van dat bestand:
{
"$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
"webJobName": "WebJob1",
"startTime": "null",
"endTime": "null",
"jobRecurrenceFrequency": "null",
"interval": null,
"runMode": "Continuous"
}
U kunt dit bestand rechtstreeks bewerken en Visual Studio biedt IntelliSense. Het bestandsschema wordt opgeslagen op https://schemastore.org en kan daar worden weergegeven.
bestand webjobs-list.json
Wanneer u een webtaakproject koppelt aan een webproject, slaat Visual Studio de naam van het WebJobs-project op in een webjobs-list.json-bestand in de map Eigenschappen van het webproject. De lijst kan meerdere WebJobs-projecten bevatten, zoals wordt weergegeven in het volgende voorbeeld:
{
"$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
"WebJobs": [
{
"filePath": "../ConsoleApplication1/ConsoleApplication1.csproj"
},
{
"filePath": "../WebJob1/WebJob1.csproj"
}
]
}
U kunt dit bestand rechtstreeks in Visual Studio bewerken met IntelliSense. Het bestandsschema wordt opgeslagen op https://schemastore.org.
Een WebJobs-project implementeren
Een WebJobs-project dat u aan een webproject hebt gekoppeld, wordt automatisch geïmplementeerd met het webproject. Zie De> app implementeren inde linkernavigatiebalk voor meer informatie over de implementatie van webproject.
Als u een WebJobs-project zelf wilt implementeren, klikt u met de rechtermuisknop op het project in Solution Explorer en selecteert u Publiceren als Azure-webtaak.
Voor een onafhankelijke webtaak wordt dezelfde wizard Web publiceren weergegeven die wordt gebruikt voor webprojecten, maar met minder instellingen die kunnen worden gewijzigd.
Dialoogvenster Azure-webtaak toevoegen
In het dialoogvenster Azure-webtaak toevoegen kunt u de naam van de webtaak en de instelling voor de uitvoeringsmodus voor uw webtaak invoeren.
Sommige velden in dit dialoogvenster komen overeen met velden in het dialoogvenster Webtaak toevoegen van de Azure Portal. Zie Achtergrondtaken uitvoeren met webtaken in Azure App Service voor meer informatie.
Informatie over webtaakimplementatie:
Zie Enabling Command-line or Continuous Delivery of Azure WebJobs (Opdrachtregel of Continue levering van Azure WebJobs inschakelen) voor meer informatie over de implementatie van de opdrachtregel.
Als u een webtaak implementeert en vervolgens besluit dat u het type webtaak wilt wijzigen en opnieuw wilt implementeren, verwijdert u het bestand webjobs-publish-settings.json . Hierdoor worden de publicatieopties opnieuw weergegeven in Visual Studio, zodat u het type webtaak kunt wijzigen.
Als u een webtaak implementeert en later de uitvoeringsmodus wijzigt van doorlopend in niet-doorlopend of omgekeerd, maakt Visual Studio een nieuwe webtaak in Azure wanneer u opnieuw implementeert. Als u andere planningsinstellingen wijzigt, maar de uitvoeringsmodus hetzelfde laat of schakelt tussen Gepland en Op aanvraag, werkt Visual Studio de bestaande taak bij in plaats van een nieuwe te maken.
Typen webtaken
Het type webtaak kan worden geactiveerd of doorlopend:
Geactiveerd (standaard): een geactiveerde webtaak wordt gestart op basis van een bindingsgebeurtenis, volgens een planning of wanneer u deze handmatig activeert (op aanvraag). Deze wordt uitgevoerd op één exemplaar waarop de web-app wordt uitgevoerd.
Doorlopend: een doorlopende webtaak wordt onmiddellijk gestart wanneer de webtaak wordt gemaakt. Het wordt standaard uitgevoerd op alle exemplaren met schaal van web-apps, maar kan worden geconfigureerd om als één exemplaar te worden uitgevoerd via settings.job.
Notitie
Een web-app kan na 20 minuten inactiviteit een time-out hebben en alleen aanvragen voor de werkelijke web-app kunnen de timer opnieuw instellen. De timer wordt niet gereset als de configuratie van de toepassing in de Azure-portal wordt bekeken of als aanvragen worden ingediend op de pagina met geavanceerde hulpmiddelen (https://<app_name>.scm.azurewebsites.net
). Als u de web-app die als host fungeert voor uw taak zo instelt dat deze continu wordt uitgevoerd, volgens een schema wordt uitgevoerd of gebeurtenisgestuurde triggers gebruikt, schakelt u de instelling Altijd aan in op de pagina Azure-configuratie van uw web-app. Met de instelling Altijd aan kunt u ervoor zorgen dat dit soort webtaken betrouwbaar worden uitgevoerd. Deze functie is alleen beschikbaar in de prijscategorieën Basic, Standard en Premium.
Een geactiveerde webtaak plannen
Wanneer u een console-app naar Azure publiceert, stelt Visual Studio het type webtaak standaard in op Geactiveerd en wordt een nieuw settings.job-bestand aan het project toegevoegd. Voor geactiveerde webtaaktypen kunt u dit bestand gebruiken om een uitvoeringsschema voor uw webtaak in te stellen.
Gebruik het bestand settings.job om een uitvoeringsschema voor uw webtaak in te stellen. Het volgende voorbeeld wordt elk uur uitgevoerd van 9:00 tot 17:00 uur:
{
"schedule": "0 0 9-17 * * *"
}
Dit bestand bevindt zich in de hoofdmap van de map WebJobs met het script van uw webtaak, zoals wwwroot\app_data\jobs\triggered\{job name}
of wwwroot\app_data\jobs\continuous\{job name}
. Wanneer u een webtaak implementeert vanuit Visual Studio, markeert u de eigenschappen van het bestand settings.job in Visual Studio als Kopiëren indien nieuwer.
Als u een webtaak maakt op basis van de Azure Portal, wordt het bestand settings.job voor u gemaakt.
CRON-expressies
WebJobs gebruikt dezelfde CRON-expressies voor planning als de timertrigger in Azure Functions. Zie Timertrigger voor Azure Functions voor meer informatie over CRON-ondersteuning.
Notitie
De standaardtijdzone die wordt gebruikt om CRON-expressies uit te voeren, is Coordinated Universal Time (UTC). Als u wilt dat uw CRON-expressie wordt uitgevoerd op basis van een andere tijdzone, maakt u een app-instelling voor de functie-app met de naam WEBSITE_TIME_ZONE. Zie NCRONTAB-tijdzones voor meer informatie.
naslaginformatie over settings.job
De volgende instellingen worden ondersteund door WebJobs:
Instelling | Type | Beschrijving |
---|---|---|
is_in_place |
Alles | Hiermee kan de webtaak worden uitgevoerd zonder eerst te worden gekopieerd naar een tijdelijke map. Zie WebJob-werkmap voor meer informatie. |
is_singleton |
Continu | Voer de webtaak alleen uit op één exemplaar wanneer deze wordt uitgeschaald. Zie Een doorlopende taak instellen als singleton voor meer informatie. |
schedule |
Geactiveerd | Voer de webtaak uit volgens een CRON-schema. Zie NCRONTAB-expressies voor meer informatie. |
stopping_wait_time |
Alles | Hiermee kunt u het afsluitgedrag beheren. Zie Respijtvol afsluiten voor meer informatie. |
Continue uitvoering
Als u AlwaysOn inschakelt in Azure, kunt u Visual Studio gebruiken om de webtaak te wijzigen zodat deze continu wordt uitgevoerd:
Als u dit nog niet hebt gedaan, publiceert u het project naar Azure.
Klik in Solution Explorer met de rechtermuisknop op het project en selecteer Publiceren.
Kies in de sectie Instellingende optie Alle instellingen weergeven.
Kies in het dialoogvenster Profielinstellingen de optie Doorlopend als WebTaaktype en kies vervolgens Opslaan.
Selecteer Publiceren op het tabblad Publiceren om de webtaak opnieuw te publiceren met de bijgewerkte instellingen.