Esercitazione: Introduzione ad Azure WebJobs SDK per l'elaborazione in background basata su eventi
Introduzione ad Azure WebJobs SDK per servizio app di Azure per consentire alle app Web di eseguire attività in background, attività pianificate e rispondere agli eventi.
Usare Visual Studio 2022 per creare un'app console .NET Core che usa WebJobs SDK per rispondere ai messaggi della coda di archiviazione di Azure, eseguire il progetto in locale e infine distribuirlo in Azure.
La presente esercitazione include informazioni su come:
- Creare un'app console
- Aggiungere una funzione
- Test in locale
- Distribuisci in Azure
- Abilitare la registrazione di Application Insights
- Aggiungere associazioni di input/output
Prerequisiti
Visual Studio 2022 con il carico di lavoro Sviluppo di Azure. Installare Visual Studio 2022.
Un account Azure con una sottoscrizione attiva. Creare un account gratuitamente.
Creare un'app console
In questa sezione si inizia creando un progetto in Visual Studio 2022. Si aggiungeranno quindi strumenti per lo sviluppo, la pubblicazione di codice e le funzioni di Azure in ascolto dei trigger e delle funzioni di chiamata. Infine, si configurerà la registrazione della console che disabilita uno strumento di monitoraggio legacy e a un provider di console con filtro predefinito.
Nota
Le procedure descritte in questo articolo sono procedure verificate per la creazione di un'app console .NET Core in esecuzione in .NET 6.0.
Creare un progetto
In Visual Studio selezionare File>Nuovo>Progetto.
In Crea un nuovo progetto selezionare Applicazione console (C#) e quindi Avanti.
In Configura il nuovo progetto assegnare al progetto il nome WebJobsSDKSample e quindi selezionare Avanti.
Scegliere il framework di destinazione e selezionare Crea. Questa esercitazione è stata verificata con .NET 6.0.
Installare pacchetti NuGet di Processi Web
Installare il pacchetto NuGet di Processi Web più recente. Questo pacchetto include Microsoft.Azure.WebJobs (WebJobs SDK), che consente di pubblicare il codice della funzione in Processi Web nel servizio app di Azure.
Ottenere la versione 4.x stabile più recente del pacchetto NuGet Microsoft.Azure.WebJobs.Extensions.
In Visual Studio passare a Strumenti>Gestione pacchetti NuGet.
Selezionare Console di Gestione pacchetti. Verrà visualizzato un elenco di cmdlet NuGet, un collegamento alla documentazione e un punto di ingresso
PM>
.Nel comando seguente sostituire
<4_X_VERSION>
con il numero di versione corrente trovato nel passaggio 1.Install-Package Microsoft.Azure.WebJobs.Extensions -version <4_X_VERSION>
In Console di Gestione pacchetti immettere il comando seguente. L'elenco di estensioni viene visualizzato e viene installato automaticamente.
Creare l'host
L'host è il contenitore di runtime per le funzioni, che resta in ascolto dei trigger e chiama le funzioni. La procedura seguente crea un host che implementa IHost
, ovvero l'host generico in ASP.NET Core.
Selezionare la scheda Program.cs, rimuovere il contenuto esistente e aggiungere queste istruzioni
using
:using System.Threading.Tasks; using Microsoft.Extensions.Hosting;
In Program.cs aggiungere anche il codice seguente:
namespace WebJobsSDKSample { class Program { static async Task Main() { var builder = new HostBuilder(); builder.ConfigureWebJobs(b => { b.AddAzureStorageCoreServices(); }); var host = builder.Build(); using (host) { await host.RunAsync(); } } } }
In ASP.NET Core le configurazioni dell'host vengono impostate chiamando metodi sull'istanza HostBuilder
. Per altre informazioni, vedere Host generico .NET. Il metodo di estensione ConfigureWebJobs
inizializza l'host WebJobs. In ConfigureWebJobs
inizializzare estensioni di associazione specifiche, ad esempio l'estensione dell'associazione di archiviazione, e impostare le proprietà di tali estensioni.
Abilitare la registrazione nella console
Configurare la registrazione della console che usa il framework di registrazione ASP.NET Core. Questo framework, Microsoft.Extensions.Logging, include un'API che funziona con un'ampia gamma di provider di registrazione predefiniti e di terze parti.
Ottenere la versione stabile più recente del pacchetto NuGet
Microsoft.Extensions.Logging.Console
, che includeMicrosoft.Extensions.Logging
.Nel comando seguente sostituire
<6_X_VERSION>
con il numero di versione corrente trovato nel passaggio 1. Ogni tipo di pacchetto NuGet ha un numero di versione univoco.Install-Package Microsoft.Extensions.Logging.Console -version <6_X_VERSION>
Nella console di Gestione pacchetti compilare il numero di versione corrente ed eseguire il comando. L'elenco di estensioni viene visualizzato e viene installato automaticamente.
Nella scheda Program.cs aggiungere questa istruzione
using
:using Microsoft.Extensions.Logging;
Continuando in Program.cs, aggiungere il metodo
ConfigureLogging
aHostBuilder
, prima del comandoBuild
. Il metodoAddConsole
aggiunge la registrazione nella console alla configurazione.builder.ConfigureLogging((context, b) => { b.AddConsole(); });
Il metodo
Main
si presenta ora come segue:static async Task Main() { var builder = new HostBuilder(); builder.ConfigureWebJobs(b => { b.AddAzureStorageCoreServices(); }); builder.ConfigureLogging((context, b) => { b.AddConsole(); }); var host = builder.Build(); using (host) { await host.RunAsync(); } }
Questa aggiunta apporta queste modifiche:
- Disabilita la registrazione nel dashboard. Il dashboard è uno strumento di monitoraggio legacy e la registrazione nel dashboard non è consigliata per scenari di produzione con velocità effettiva elevata.
- Aggiunge il provider della console con i filtri predefiniti.
A questo punto è possibile aggiungere una funzione attivata dai messaggi in arrivo in una coda di Archiviazione di Azure.
Aggiungere una funzione
Una funzione è un'unità di codice eseguita in base a una pianificazione, viene attivata in base a eventi o viene eseguita su richiesta. Un trigger è in ascolto di un evento del servizio. Nel contesto di WebJobs SDK, attivato non fa riferimento alla modalità di distribuzione. I processi Web pianificati o basati su eventi creati con l'SDK devono essere sempre distribuiti come processi Web continui con "Always On" abilitato.
In questa sezione viene creata una funzione attivata dai messaggi in una coda di Archiviazione di Azure. Prima di tutto, è necessario aggiungere un'estensione di associazione per connettersi ad Archiviazione di Azure.
Installare l'estensione dei binding di Archiviazione
A partire dalla versione 3 di WebJobs SDK, per connettersi ai servizi di archiviazione di Azure è necessario installare un pacchetto di estensione dell'associazione di archiviazione separato.
Nota
A partire dalla versione 5.x, Microsoft.Azure.WebJobs.Extensions.Storage è stato suddiviso per servizio di archiviazione ed è stata eseguita la migrazione del metodo di estensione AddAzureStorage()
in base al tipo di servizio.
Ottenere l'ultima versione stabile del pacchetto NuGet Microsoft.Azure.WebJobs.Extensions.Storage versione 5.x.
Nel comando seguente sostituire
<5_X_VERSION>
con il numero di versione corrente trovato nel passaggio 1. Ogni tipo di pacchetto NuGet ha un numero di versione univoco.Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version <5_X_VERSION>
Nella console di Gestione pacchetti eseguire il comando con il numero di versione corrente nel punto di ingresso
PM>
.Continuando in Program.cs, nel metodo di estensione
ConfigureWebJobs
aggiungere il metodoAddAzureStorageQueues
nell'istanzaHostBuilder
(prima del comandoBuild
) per inizializzare l'estensione Storage. A questo punto, il metodoConfigureWebJobs
è simile al seguente:builder.ConfigureWebJobs(b => { b.AddAzureStorageCoreServices(); b.AddAzureStorageQueues(); });
Aggiungere il codice seguente nel metodo
Main
dopo la creazione di un'istanza dibuilder
:builder.UseEnvironment(EnvironmentName.Development);
L'esecuzione in modalità di sviluppo riduce il backoff esponenziale del polling della coda che può ritardare significativamente il tempo necessario per il runtime per trovare il messaggio e richiamare la funzione. È consigliabile rimuovere questa riga di codice o passare a
Production
al termine dello sviluppo e del test.Il metodo
Main
dovrà ora essere come indicato nell'esempio seguente:static async Task Main() { var builder = new HostBuilder(); builder.UseEnvironment(EnvironmentName.Development); builder.ConfigureLogging((context, b) => { b.AddConsole(); }); builder.ConfigureWebJobs(b => { b.AddAzureStorageCoreServices(); b.AddAzureStorageQueues(); }); var host = builder.Build(); using (host) { await host.RunAsync(); } }
Creare una funzione attivata da una coda
L'attributo QueueTrigger
indica al runtime di chiamare questa funzione quando viene scritto un nuovo messaggio in una coda di archiviazione di Azure denominata queue
. Il contenuto del messaggio nella coda viene passato al codice del metodo nel parametro message
. Nel corpo del metodo vengono elaborati i dati del trigger. In questo esempio, il codice registra semplicemente il messaggio.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto, selezionare Aggiungi>Nuovo elemento e quindi selezionare Classe.
Assegnare al nuovo file di classe C# il nome Functions.cs e selezionare Aggiungi.
In Functions.cs sostituire il modello generato con il codice seguente:
using Microsoft.Azure.WebJobs; using Microsoft.Extensions.Logging; namespace WebJobsSDKSample { public class Functions { public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger) { logger.LogInformation(message); } } }
È necessario contrassegnare la classe Functions come
public static
per consentire al runtime di accedere ed eseguire il metodo. Nell'esempio di codice precedente, quando un messaggio viene aggiunto a una coda denominataqueue
, la funzione viene eseguita e la stringamessage
viene scritta nei log. La coda monitorata si trova nell'account di archiviazione di Azure predefinito, creato successivamente.
Il parametro message
non deve necessariamente essere una stringa. È possibile eseguire l'associazione anche a un oggetto JSON, una matrice di byte o un oggetto CloudQueueMessage. Vedere l'utilizzo del trigger della coda. Ogni tipo di associazione (come code, BLOB o tabelle) presenta un diverso set di tipi di parametri a cui è possibile eseguire l'associazione.
Creare un account di archiviazione di Azure
L'emulatore di archiviazione di Azure eseguito in locale non include tutte le funzionalità necessarie a WebJobs SDK. Si creerà un account di archiviazione in Azure e si configurerà il progetto per usarlo.
Per informazioni su come creare un account di archiviazione per utilizzo generico v2, vedere Creare un account di archiviazione di Azure.
Individuare e copiare la stringa di connessione
Per configurare l'archiviazione è necessaria una stringa di connessione. Mantenere questa stringa di connessione per i passaggi successivi.
Nel portale di Azure passare all'account di archiviazione e selezionare Impostazioni.
In Impostazioni selezionare Chiavi di accesso.
Per Stringa di connessione in key1 selezionare l'icona Copia negli Appunti.
Configurare l'archiviazione per l'esecuzione in locale
WebJobs SDK cerca la stringa di connessione di archiviazione nelle impostazioni applicazione in Azure. In caso di esecuzione in locale, questo valore viene cercato nel file di configurazione locale o nelle variabili di ambiente.
Fare clic con il pulsante destro del mouse sul progetto, selezionare Aggiungi>Nuovo elemento, scegliere File di configurazione JSON per JavaScript, assegnare al nuovo file il nome appsettings.json, quindi selezionare Aggiungi.
Nel nuovo file aggiungere un campo
AzureWebJobsStorage
, come illustrato nell'esempio seguente:{ "AzureWebJobsStorage": "{storage connection string}" }
Sostituire {storage connection string} con la stringa di connessione copiata in precedenza.
Selezionare il file appsettings.json in Esplora soluzioni e, nella finestra Proprietà, impostare l'azione Copia nella directory di output su Copia se più recente.
Poiché questo file contiene un segreto della stringa di connessione, non è consigliabile archiviare il file in un repository di codice remoto. Dopo aver pubblicato il progetto in Azure, è possibile aggiungere la stessa impostazione dell'app per le stringhe di connessione nell'app nel servizio app di Azure.
Test in locale
Compilare ed eseguire il progetto in locale e creare una coda di messaggi per attivare la funzione.
Nel portale di Azure passare all'account di archiviazione e selezionare la scheda Code (1). Selezionare + Coda (2) e immettere la coda come Nome coda (3). Selezionare quindi OK (4).
Fare clic sulla nuova coda e selezionare Aggiungi messaggio.
Nella finestra di dialogo Aggiungi messaggio immettere Hello World! come testo Messaggio e quindi selezionare OK. È ora presente un messaggio nella coda.
Premere CTRL+F5 per eseguire il progetto.
La console mostra che il runtime ha trovato la funzione. Poiché è stato usato l'attributo
QueueTrigger
nella funzioneProcessQueueMessage
, il runtime di Processi Web è in ascolto dei messaggi nella coda denominataqueue
. Quando trova un nuovo messaggio in questa coda, il runtime chiama la funzione, passando il valore della stringa del messaggio.Tornare nella finestra Coda e aggiornarla. Il messaggio non è più presente perché è stato elaborato dalla funzione in esecuzione in locale.
Chiudere la finestra della console.
È ora possibile pubblicare il progetto WebJobs SDK in Azure.
Distribuisci in Azure
Durante la distribuzione si crea un'istanza del servizio app in cui verranno eseguite le funzioni. Quando si pubblica un'app console .NET nel servizio app in Azure, questa viene eseguita automaticamente come processo Web. Per altre informazioni sulla pubblicazione, vedere Sviluppare e distribuire processi Web usando Visual Studio.
Creazione di risorse Azure
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Pubblica.
Nella finestra di dialogo Pubblica selezionare Azure per la Destinazione e quindi selezionare Avanti.
Selezionare Processi Web di Azure per Destinazione specifica e quindi selezionare Avanti.
Sopra Istanze del servizio app selezionare il pulsante più (+) per Creare un nuovo processo Web di Azure.
Nella finestra di dialogo Servizio app (Windows) usare le impostazioni di hosting nella tabella seguente.
Impostazione Valore suggerito Description Nome Nome globalmente univoco Nome che identifica in modo univoco la nuova app per le funzioni. Abbonamento Scegliere la sottoscrizione in uso Sottoscrizione di Azure da usare. Gruppo di risorse myResourceGroup Nome del gruppo di risorse in cui creare l'app per le funzioni. Per creare un nuovo gruppo di risorse scegliere Nuovo. Piano di hosting Piano di servizio app Un piano di servizio app specifica la località, le dimensioni e le funzionalità della server farm Web che ospita l'app. Quando si ospitano più app, è possibile limitare i costi configurando le app Web in modo che condividano un singolo piano di servizio app. I piani di servizio app definiscono l'area, le dimensioni dell'istanza, il numero di scalabilità e lo SKU (Gratuito, Condiviso, Basic, Standard o Premium). Scegliere Nuovo per creare un nuovo piano di servizio app. I livelli Gratuito e Basic non supportano l'opzione Always On per mantenere il sito in esecuzione continuamente. Selezionare Crea per creare un processo Web e le risorse correlate in Azure con queste impostazioni e distribuire il codice del progetto.
Selezionare Fine per tornare alla pagina Pubblica.
Abilitare AlwaysOn
Per un processo Web continuo, è necessario abilitare l'impostazione Always On nel sito in modo che i processi Web vengano eseguiti correttamente. Se non si abilita Always On, il runtime diventa inattivo dopo alcuni minuti di inattività.
Nella pagina Pubblica selezionare i tre puntini sopra Hosting per visualizzare Azioni della sezione Profilo di hosting e scegliere Apri nel portale di Azure.
In Impostazioni scegliere Configurazione>Impostazioni generali, impostare Always On su One quindi selezionare Salva e Continua per riavviare il sito.
Pubblicare il progetto
Con l'app Web creata in Azure, è possibile pubblicare il progetto Processi Web.
Nella pagina Pubblica in Hosting selezionare il pulsante di modifica e modificare il Tipo di processo Web in
Continuous
e selezionare Salva. In questo modo si garantisce che il processo Web sia in esecuzione quando i messaggi vengono aggiunti alla coda. I processi Web attivati vengono in genere usati solo per webhook manuali.Selezionare il pulsante Pubblica nell'angolo superiore destro della pagina Pubblica. Al termine dell'operazione, il processo Web viene eseguito in Azure.
Creare un'impostazione dell'app di connessione di archiviazione
È necessario creare la stessa impostazione della stringa di connessione di archiviazione in Azure usata in locale nel file di configurazione appsettings.json. In questo modo è possibile archiviare in modo più sicuro la stringa di connessione e
Nella pagina Pubblica profilo selezionare i tre puntini sopra Hosting per visualizzare Azioni del profilo di hosting e scegliere Gestire le impostazioni del servizio app di Azure.
In Impostazioni applicazione scegliere + Aggiungi impostazione.
In Nuovo nome dell'impostazione dell'app digitare
AzureWebJobsStorage
e selezionare OK.In Remoto incollare la stringa di connessione dall'impostazione locale e selezionare OK.
La stringa di connessione è ora impostata nell'app in Azure.
Attivare la funzione in Azure
Assicurarsi di non essere in esecuzione in locale. Chiudere la finestra della console se è ancora aperta. In caso contrario, l'istanza locale potrebbe elaborare per prima i messaggi creati nella coda.
Nella pagina Coda in Visual Studio aggiungere un messaggio alla coda come indicato in precedenza.
Aggiornare la pagina Coda. Il nuovo messaggio non sarà presente perché è stato elaborato dalla funzione eseguita in Azure.
Abilitare la registrazione di Application Insights
Quando il processo Web viene eseguito in Azure, non è possibile monitorare l'esecuzione delle funzioni visualizzando l'output della console. Per poter monitorare il processo Web, è necessario creare un'istanza di Application Insights associata quando si pubblica il progetto.
Creare un'istanza di Application Insights
Nella pagina Pubblica profilo selezionare i tre puntini sopra Hosting per visualizzare Azioni della sezione Profilo di hosting e scegliere Apri nel portale di Azure.
Nell'app Web. in Impostazioni scegliere Application Insights e selezionare Attiva Application Insights.
Verificare il Nome risorsa generato per l'istanza e il Percorso e selezionare Applica.
In Impostazioni scegliere Configurazione e verificare la creazione di una nuova
APPINSIGHTS_INSTRUMENTATIONKEY
. Questa chiave viene usata per connettere l'istanza del processo Web ad Application Insights.
Per sfruttare la registrazione di Application Insights, è necessario aggiornare anche il codice di registrazione.
Installare l'estensione Application Insights
Ottenere la versione stabile più recente del pacchetto NuGet Microsoft.Azure.WebJobs.Logging.ApplicationInsights versione 3.x.
Nel comando seguente sostituire
<3_X_VERSION>
con il numero di versione corrente trovato nel passaggio 1. Ogni tipo di pacchetto NuGet ha un numero di versione univoco.Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -Version <3_X_VERSION>
Nella console di Gestione pacchetti eseguire il comando con il numero di versione corrente nel punto di ingresso
PM>
.
Inizializzare il provider di registrazione di Application Insights
Aprire Program.cs e aggiungere l'inizializzatore seguente in ConfigureLogging
dopo la chiamata a AddConsole
:
// If the key exists in settings, use it to enable Application Insights.
string instrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(instrumentationKey))
{
b.AddApplicationInsightsWebJobs(o => o.InstrumentationKey = instrumentationKey);
}
Il codice del metodo Main
dovrebbe ora essere simile all'esempio seguente:
static async Task Main()
{
var builder = new HostBuilder();
builder.UseEnvironment(EnvironmentName.Development);
builder.ConfigureWebJobs(b =>
{
b.AddAzureStorageCoreServices();
b.AddAzureStorage();
});
builder.ConfigureLogging((context, b) =>
{
b.AddConsole();
// If the key exists in settings, use it to enable Application Insights.
string instrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(instrumentationKey))
{
b.AddApplicationInsightsWebJobs(o => o.InstrumentationKey = instrumentationKey);
}
});
var host = builder.Build();
using (host)
{
await host.RunAsync();
}
}
In questo modo il provider di registrazione di Application Insights viene inizializzato con il filtro predefinito. Durante l'esecuzione in locale, tutti i log di informazioni e di livello superiore vengono scritti sia nella console che in Application Insights.
Ripubblicare il progetto e attivare nuovamente la funzione
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Pubblica.
Come in precedenza, usare il portale di Azure per creare un messaggio di coda come in precedenza, immettendo però Hello App Insights! come testo del messaggio.
Nella pagina Pubblica profilo selezionare i tre puntini sopra Hosting per visualizzare Azioni della sezione Profilo di hosting e scegliere Apri nel portale di Azure.
Nell'app Web in Impostazioni scegliere Application Insights e selezionare Visualizza dati di Application Insights.
Selezionare Cerca e quindi selezionare Visualizza tutti i dati nelle ultime 24 ore.
Se non viene visualizzato il messaggio Hello App Insights!o, selezionare periodicamente per alcuni minuti Aggiorna. I log non vengono visualizzati immediatamente perché il client di Application Insights impiega tempo per scaricare i log che elabora.
Aggiungere associazioni di input/output
Le associazioni semplificano il codice che legge e scrive i dati. Le associazioni di input semplificano il codice per la lettura di dati. Le associazioni di output semplificano il codice per la scrittura di dati.
Aggiungere associazioni
Le associazioni di input semplificano il codice per la lettura di dati. Per questo esempio, il messaggio della coda è il nome di un BLOB, che verrà usato per trovare e leggere un BLOB in Archiviazione di Azure. Si useranno quindi le associazioni di output per scrivere una copia del file nello stesso contenitore.
In Functions.cs aggiungere un oggetto
using
:using System.IO;
Sostituire il metodo
ProcessQueueMessage
con il codice seguente:public static void ProcessQueueMessage( [QueueTrigger("queue")] string message, [Blob("container/{queueTrigger}", FileAccess.Read)] Stream myBlob, [Blob("container/copy-{queueTrigger}", FileAccess.Write)] Stream outputBlob, ILogger logger) { logger.LogInformation($"Blob name:{message} \n Size: {myBlob.Length} bytes"); myBlob.CopyTo(outputBlob); }
In questo codice,
queueTrigger
è un'espressione di associazione che viene risolta in un diverso valore in fase di esecuzione. In fase di esecuzione corrisponde al contenuto del messaggio nella coda.Questo codice usa associazioni di output per creare una copia del file identificato dal messaggio della coda. La copia del file è preceduta da copy-.
In Program.cs, nel metodo di estensione
ConfigureWebJobs
aggiungere il metodoAddAzureStorageBlobs
nell'istanza diHostBuilder
(prima del comandoBuild
) per inizializzare l'estensione storage. A questo punto, il metodoConfigureWebJobs
è simile al seguente:builder.ConfigureWebJobs(b => { b.AddAzureStorageCoreServices(); b.AddAzureStorageQueues(); b.AddAzureStorageBlobs(); });
Creare un contenitore BLOB nell'account di archiviazione.
a. Nel portale di Azure passare alla scheda Contenitori sotto Archiviazione dati e selezionare + Contenitore
b. Nella finestra di dialogo Nuovo contenitore immettere Contenitore come nome del contenitore e quindi selezionare Crea.
Caricare il file Program.cs nel contenitore BLOB. Questo file viene qui usato come esempio. È possibile caricare qualsiasi file di testo e creare un messaggio nella coda con il nome del file.
a. Selezionare il nuovo contenitore creato
b. Seleziona il pulsante Carica.
c. Trovare e selezionare Program.cs e quindi selezionare OK.
Ripubblicare il progetto
In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Pubblica.
Nella finestra di dialogo Pubblica verificare che il profilo corrente sia selezionato e quindi selezionare Pubblica. I risultati della pubblicazione sono descritti in dettaglio nella finestra Output.
Creare un messaggio nella coda creata in precedenza, con Program.cs come testo del messaggio.
Una copia del file, copy-Program.cs, verrà visualizzata nel contenitore BLOB.
Passaggi successivi
Questa esercitazione ha illustrato come creare, eseguire e distribuire un progetto WebJobs SDK 3.x.