Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Standardmäßig verwendet Durable Functions die Azure Functions-Runtime zum Hosten von Orchestrierungen. Allerdings gibt es möglicherweise Szenarios, in denen Sie den Code, der auf Ereignisse lauscht, stärker steuern müssen. In diesem Artikel erfahren Sie, wie Sie Ihre Orchestrierung mithilfe des WebJobs SDK implementieren. Einen ausführlicheren Vergleich zwischen Functions und WebJobs finden Sie unter Vergleichen von Functions und WebJobs.
Azure Functions und die Erweiterung Durable Functions bauen auf dem WebJobs SDK auf. Der Auftragshost im WebJobs SDK ist die Runtime in Azure Functions. Wenn Sie das Verhalten auf eine Weise steuern müssen, die in Azure Functions nicht möglich ist, können Sie Durable Functions entwickeln und ausführen, indem Sie das WebJobs SDK selbst verwenden.
In Version 3.x des WebJobs SDK ist der Host eine Implementierung von IHost
, und in Version 2.x verwenden Sie das Objekt JobHost
.
Das Beispiel für die Verkettung von Durable Functions ist in einer WebJobs SDK 2.x-Version verfügbar: Laden Sie das Durable Functions-Repository herunter. Führen Sie einen Check-Out für den Branch v1 durch, und navigieren Sie zum Ordner samples\webjobssdk\chaining.
Voraussetzungen
Dieser Artikel setzt voraus, dass Sie mit den Grundlagen des WebJobs SDK, der Entwicklung von C#-Klassenbibliotheken für Azure Functions und Durable Functions vertraut sind. Wenn Sie eine Einführung in diese Konzepte benötigen, nutzen Sie die folgenden Ressourcen:
- Erste Schritte mit dem WebJobs SDK
- Erstellen Ihrer ersten Funktion mit Visual Studio
- Durable Functions
Zur Durchführung der in diesem Artikel aufgeführten Schritte ist Folgendes erforderlich:
Installieren Sie Visual Studio 2019 mit der Workload Azure-Entwicklung.
Wenn Sie bereits über Visual Studio, jedoch nicht über diese Workload verfügen, müssen Sie die Workload hinzufügen, indem Sie Tools>Tools und Features abrufen auswählen.
(Sie können stattdessen Visual Studio Code verwenden, aber einige der Anweisungen sind spezifisch für Visual Studio.)
Installieren Sie den Azurite-Speicheremulator und führen Sie ihn aus. Eine Alternative ist die Aktualisierung der App.config- Datei mit einer authentischen Azure Storage-Verbindungszeichenfolge.
WebJobs SDK-Versionen
In diesem Artikel wird erläutert, wie man ein WebJobs SDK 2.x-Projekt (entspricht Azure Functions Version 1.x) entwickelt. Informationen zu Version 3.x finden Sie weiter unten in diesem Artikel unter WebJobs SDK 3.x.
Erstellen einer Konsolen-App
Sie müssen zuerst eine Konsolen-App erstellen, um Durable Functions als WebJobs ausführen zu können. Ein WebJobs SDK-Projekt ist lediglich ein Konsolen-App-Projekt, für das die entsprechenden NuGet-Pakete installiert sind.
Wählen Sie im Visual Studio-Dialogfeld Neues Projekt die Option Klassischer Windows-Desktop>Konsolen-App (.NET Framework) aus. In der Projektdatei sollte die TargetFrameworkVersion
v4.6.1
sein.
Visual Studio bietet auch eine WebJob-Projektvorlage, die Sie verwenden können, indem Sie Cloud>Azure WebJob (.NET Framework) auswählen. Diese Vorlage installiert viele Pakete, von denen einige möglicherweise nicht benötigt werden.
Installieren von NuGet-Paketen
Sie benötigen NuGet-Pakete für das WebJobs SDK, Hauptbindungen, das Protokollierungsframework und die Durable Task-Erweiterung. Hier sind Befehle der Paket-Manager-Konsole für diese Pakete mit den neuesten stabilen Versionsnummern zum Zeitpunkt der Erstellung dieses Artikels:
Install-Package Microsoft.Azure.WebJobs.Extensions -version 2.2.0
Install-Package Microsoft.Extensions.Logging -version 2.0.1
Install-Package Microsoft.Azure.WebJobs.Extensions.DurableTask -version 1.8.7
Darüber hinaus benötigen Sie Protokollanbieter. Die folgenden Befehle installieren den Azure Application Insights-Anbieter und den ConfigurationManager
. Mit dem ConfigurationManager
können Sie den Application Insights-Instrumentierungsschlüssel aus den App-Einstellungen abrufen.
Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -version 2.2.0
Install-Package System.Configuration.ConfigurationManager -version 4.4.1
Über die folgenden Befehle wird der Konsolenanbieter installiert:
Install-Package Microsoft.Extensions.Logging.Console -version 2.0.1
JobHost-Code
Wenn die Konsolen-App erstellt und die erforderlichen NuGet-Pakete installiert sind, können Sie Durable Functions verwenden. Dazu verwenden Sie JobHost-Code.
Um die Erweiterung Durable Functions zu verwenden, rufen Sie UseDurableTask
für das JobHostConfiguration
-Objekt in Ihrer Main
-Methode auf:
var config = new JobHostConfiguration();
config.UseDurableTask(new DurableTaskExtension
{
HubName = "MyTaskHub",
};
Eine Liste der Eigenschaften, die Sie im DurableTaskExtension
-Objekt festlegen können, finden Sie unter host.json.
Über die Main
-Methode richten Sie auch den Protokollanbieter ein. In dem folgenden Beispiel werden die Konsole und Application Insights-Anbieter konfiguriert.
static void Main(string[] args)
{
using (var loggerFactory = new LoggerFactory())
{
var config = new JobHostConfiguration();
config.DashboardConnectionString = "";
var instrumentationKey =
ConfigurationManager.AppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"];
config.LoggerFactory = loggerFactory
.AddApplicationInsights(instrumentationKey, null)
.AddConsole();
config.UseTimers();
config.UseDurableTask(new DurableTaskExtension
{
HubName = "MyTaskHub",
});
var host = new JobHost(config);
host.RunAndBlock();
}
}
Functions
Durable Functions im Kontext von WebJobs unterscheidet sich etwas von Durable Functions im Kontext von Azure Functions. Wenn Sie Ihren Code schreiben, ist es wichtig, diese Unterschiede zu berücksichtigen.
Die folgenden Azure Functions werden vom WebJobs SDK nicht unterstützt:
FunctionName-Attribut
In einem WebJobs-SDK-Projekt ist der Methodenname einer Funktion der Funktionsname. Das Attribut FunctionName
wird nur in Azure Functions verwendet.
HTTP-Trigger
Das WebJobs SDK verfügt nicht über einen HTTP-Trigger. Der Orchestrierungsclient des Beispielprojekts verwendet einen Zeitgebertrigger:
public static async Task CronJob(
[TimerTrigger("0 */2 * * * *")] TimerInfo timer,
[OrchestrationClient] DurableOrchestrationClient client,
ILogger logger)
{
...
}
HTTP-Verwaltungs-API
Da für das WebJobs SDK kein HTTP-Trigger vorhanden ist, verfügt es auch über keine HTTP-Verwaltungs-API.
In einem WebJobs SDK-Projekt können Sie Methoden für das Orchestrierungsclientobjekt aufrufen, anstatt HTTP-Anforderungen zu senden. Die folgenden Methoden entsprechen den drei Aufgaben, die Sie mit der HTTP-Verwaltungs-API ausführen können:
GetStatusAsync
RaiseEventAsync
TerminateAsync
Die Orchestrationsclientfunktion im Beispielprojekt startet die Orchestratorfunktion und wird dann in einer Schleife ausgeführt, die GetStatusAsync
alle 2 Sekunden aufruft:
string instanceId = await client.StartNewAsync(nameof(HelloSequence), input: null);
logger.LogInformation($"Started new instance with ID = {instanceId}.");
DurableOrchestrationStatus status;
while (true)
{
status = await client.GetStatusAsync(instanceId);
logger.LogInformation($"Status: {status.RuntimeStatus}, Last update: {status.LastUpdatedTime}.");
if (status.RuntimeStatus == OrchestrationRuntimeStatus.Completed ||
status.RuntimeStatus == OrchestrationRuntimeStatus.Failed ||
status.RuntimeStatus == OrchestrationRuntimeStatus.Terminated)
{
break;
}
await Task.Delay(TimeSpan.FromSeconds(2));
}
Ausführen des Beispiels
Sie haben Durable Functions für die Ausführung als WebJob-Dienst eingerichtet, und Sie verstehen, wie sich diese Ausführung von der Ausführung als eigenständiger Azure Functions-Dienst unterscheidet. An diesem Punkt kann es hilfreich sein, die Funktion in einem Beispiel zu sehen.
Dieser Abschnitt bietet eine Übersicht über die Ausführung des Beispielprojekts. Ausführliche Anweisungen, wie Sie ein WebJobs SDK-Projekt lokal ausführen und in einem Azure WebJob bereitstellen, finden Sie unter Erste Schritte mit dem WebJobs SDK.
Lokales Ausführen
Stellen Sie sicher, dass der Speicheremulator ausgeführt wird (siehe Voraussetzungen).
Wenn Sie beim lokalen Ausführen des Projekts Protokolle in Application Insights anzeigen möchten:
a. Erstellen Sie eine Application Insights-Ressource, und verwenden Sie für die Ressource den App-Typ Allgemein.
b. Speichern Sie den Instrumentierungsschlüssel in der Datei App.config.
Führen Sie das Projekt aus.
Ausführen in Azure
Erstellen Sie eine Web-App und eine Speicherkonto.
Speichern Sie in der Web-App die Speicherverbindungsinformationen in einer App-Einstellung mit dem Namen
AzureWebJobsStorage
. Für die höchste Sicherheit sollten Sie mit Ihrem Speicherkonto eine Verbindung mit einer verwalteten Identität herstellen.Erstellen Sie eine Application Insights-Ressource, und verwenden Sie für die Ressource den App-Typ Allgemein.
Speichern Sie den Instrumentierungsschlüssel in einer App-Einstellung namens
APPINSIGHTS_INSTRUMENTATIONKEY
.Führen Sie die Bereitstellung als WebJob aus.
WebJobs SDK 3.x
In diesem Artikel wird erläutert, wie man ein WebJobs SDK 2.x-Projekt entwickelt. Wenn Sie ein WebJobs SDK 3.x-Projekt entwickeln, hilft Ihnen dieser Abschnitt dabei, die Unterschiede zu verstehen.
Die wichtigste eingeführte Änderung ist die Verwendung von .NET Core anstelle von .NET Framework. Zum Erstellen eines WebJobs SDK 3.x-Projekts sind die Anweisungen identisch, mit diesen Ausnahmen:
Erstellen Sie eine .NET Core-Konsolen-App. Wählen Sie im Visual Studio-Dialogfeld Neues Projekt die Option .NET Core>Konsolen-App (.NET Core) aus. Die Projektdatei gibt an, dass
TargetFramework
netcoreapp2.x
ist.Wählen Sie die Releaseversion WebJobs SDK 3.x der folgenden Pakete:
Microsoft.Azure.WebJobs.Extensions
Microsoft.Azure.WebJobs.Extensions.Storage
Microsoft.Azure.WebJobs.Logging.ApplicationInsights
Legen Sie die Speicherverbindungszeichenfolge und den Application Insights-Instrumentierungsschlüssel in einer appsettings.json-Datei mithilfe des .NET Core-Konfigurationsframeworks fest. Ein Beispiel:
{ "AzureWebJobsStorage": "<replace with storage connection string>", "APPINSIGHTS_INSTRUMENTATIONKEY": "<replace with Application Insights instrumentation key>" }
Wichtig
Für die höchste Sicherheit sollten Sie mit einer verwalteten Identität eine Verbindung mit Ihrem Speicherkonto herstellen. Weitere Informationen finden Sie unter Verwenden verwalteter Identitäten für App Service und Azure Functions.
Ändern Sie den
Main
-Methodencode, um dies zu tun. Hier sehen Sie ein Beispiel:static void Main(string[] args) { var hostBuilder = new HostBuilder() .ConfigureWebJobs(config => { config.AddAzureStorageCoreServices(); config.AddAzureStorage(); config.AddTimers(); config.AddDurableTask(options => { options.HubName = "MyTaskHub"; options.AzureStorageConnectionStringName = "AzureWebJobsStorage"; }); }) .ConfigureLogging((context, logging) => { logging.AddConsole(); logging.AddApplicationInsights(config => { config.InstrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"]; }); }) .UseConsoleLifetime(); var host = hostBuilder.Build(); using (host) { host.Run(); } }
Nächste Schritte
Weitere Informationen zu dem WebJobs SDK finden Sie unter How to use the WebJobs SDK (Gewusst wie: Verwenden des WebJobs SDK).