Personalizzare il ciclo di vita di un ruolo Web o di lavoro in .NET
Importante
Servizi cloud (versione classica) è ora deprecato per tutti i clienti a partire dal 1° settembre 2024. Tutte le distribuzioni in esecuzione esistenti verranno arrestate e arrestate da Microsoft e i dati andranno persi definitivamente a partire da ottobre 2024. Le nuove distribuzioni devono usare il nuovo modello di distribuzione basato su Azure Resource Manager Azure Servizi cloud (supporto esteso).
Quando si crea un ruolo di lavoro, si estende la classe RoleEntryPoint che fornisce metodi per la sovrascrittura che consentono di rispondere agli eventi del ciclo di vita. Per i ruoli Web questa classe è facoltativa, molto utilizzata per rispondere agli eventi del ciclo di vita.
Estendere la classe RoleEntryPoint
La classe RoleEntryPoint include metodi che vengono chiamati da Azure quando avvia, esegue o arresta un ruolo Web o di lavoro. In modo facoltativo, è possibile ignorare questi metodi per gestire l'inizializzazione, sequenze di arresto o il thread di esecuzione del ruolo.
Quando si estende RoleEntryPointè necessario tenere presente i seguenti comportamenti dei metodi:
Il metodo OnStart restituisce un valore booleano, pertanto è possibile restituire False da questo metodo.
Se il codice restituisce falseil processo del ruolo viene interrotto improvvisamente, senza eseguire nessuna sequenza di arresto in programma. In generale, è consigliabile evitare la restituzione di false dal metodo OnStart.
Qualsiasi eccezione non rilevata all'interno di un overload di un metodo RoleEntryPoint viene considerato come un'eccezione non gestita.
Se si verifica un'eccezione all'interno di uno dei metodi del ciclo di vita, Azure genera l’evento UnhandledException e il processo viene interrotto. Se il ruolo è offline, Azure lo riavvia. Quando si verifica un'eccezione non gestita, l’evento Stopping non viene generato e il metodo OnStop non viene chiamato.
Se il ruolo non viene avviato o passa in modo ciclico tra gli stati di arresto, di inizializzazione e di occupato, il codice potrebbe generare un'eccezione non gestita all'interno di uno degli eventi del ciclo di vita ogni volta che il ruolo viene riavviato. In questo caso, utilizzare l’evento UnhandledException per determinare la causa dell'eccezione e gestirla nel modo appropriato. Il ruolo potrebbe anche essere restituito dal metodo Run che causa il riavvio del ruolo. Per ulteriori informazioni sugli stati di distribuzione, vedere problemi comuni che causano il riciclo dei ruoli.
Nota
Se si usano gli strumenti di Azure per Microsoft Visual Studio per sviluppare l'applicazione, i modelli di progetto di ruolo estendono automaticamente la classe RoleEntryPoint nei file WebRole.cs e WorkerRole.cs.
Metodo OnStart
Il metodo OnStart viene chiamato quando l'istanza del ruolo viene portata online da Azure. Durante l'esecuzione del codice OnStart, l'istanza del ruolo viene contrassegnata come Busy e il servizio di bilanciamento del carico non indirizza alcun traffico esterno. È possibile eseguire l'override di questo metodo per eseguire operazioni di inizializzazione, ad esempio implementare i gestori eventi e avviare la diagnostica Azure.
Se OnStart restituisce true, l'inizializzazione dell'istanza viene completata e Azure chiama il metodo RoleEntryPoint.Run. Se OnStart restituisce false, il ruolo termina immediatamente senza eseguire alcuna sequenza di arresto pianificata.
Il seguente esempio di codice illustra come eseguire l'override del metodo OnStart . Questo metodo configura e avvia un monitor di diagnostica all’avvio dell'istanza del ruolo e imposta il trasferimento dei dati di registrazione in un account di archiviazione:
public override bool OnStart()
{
var config = DiagnosticMonitor.GetDefaultInitialConfiguration();
config.DiagnosticInfrastructureLogs.ScheduledTransferLogLevelFilter = LogLevel.Error;
config.DiagnosticInfrastructureLogs.ScheduledTransferPeriod = TimeSpan.FromMinutes(5);
DiagnosticMonitor.Start("DiagnosticsConnectionString", config);
return true;
}
Metodo OnStop
Il metodo OnStop viene chiamato dopo che Azure accetta un'istanza del ruolo offline e prima che il processo venga chiuso. È possibile eseguire l'override di questo metodo per chiamare il codice necessario affinché l'istanza del ruolo effettui un arresto normale.
Importante
Il codice in esecuzione nel metodo OnStop presenta un tempo di completamento limitato quando viene chiamato per motivi diversi da un arresto avviato dall'utente. Trascorso tale tempo, il processo viene terminato ed è quindi necessario assicurarsi che il codice del metodo OnStop possa essere eseguito rapidamente o tolleri il mancato completamento. Il metodo OnStop viene chiamato dopo la generazione dell'evento Stopping.
Metodo Run
È possibile eseguire l'override del metodo Run per implementare un thread a esecuzione prolungata per l'istanza del ruolo.
L’esecuzione dell'override del metodo Run non è obbligatoria, l'implementazione predefinita avvia un thread in costante stato di sospensione. Se si esegue l'override del metodo Run , il codice dovrebbe bloccarsi in modo indefinito. Se il metodo Run restituisce un valore, il ruolo viene riciclato in modo automatico. In altre parole, Azure genera l'evento Stopping e chiama il metodo OnStop in modo che le sequenze di arresto possano essere eseguite prima che il ruolo venga portato offline.
Implementazione dei metodi del ciclo di vita ASP.NET per un ruolo web
È possibile utilizzare i metodi del ciclo di vita ASP.NET, oltre a quelli forniti dalla classe RoleEntryPoint, per gestire le sequenze di inizializzazione e di arresto per un ruolo web. Questo approccio potrebbe essere utile per motivi di compatibilità se si trasferisce un'applicazione ASP.NET esistente in Azure. I metodi del ciclo di vita ASP.NET vengono chiamati dall'interno dei metodi RoleEntryPoint . Il metodo Application_Start viene chiamato al termine del metodo RoleEntryPoint.OnStart. Il metodo Application_End viene chiamato prima che venga chiamato il metodo RoleEntryPoint.OnStop.
Passaggi successivi
Informazioni su come creare un pacchetto del servizio cloud.