Personalizzare il ciclo di vita di un ruolo Web o di lavoro in .NETCustomize the Lifecycle of a Web or Worker role in .NET

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.When you create a worker role, you extend the RoleEntryPoint class which provides methods for you to override that let you respond to lifecycle events. Per i ruoli Web questa classe è facoltativa, molto utilizzata per rispondere agli eventi del ciclo di vita.For web roles this class is optional, so you must use it to respond to lifecycle events.

Estendere la classe RoleEntryPointExtend the RoleEntryPoint class

La classe RoleEntryPoint include metodi che vengono chiamati da Azure quando avvia, esegue o arresta un ruolo Web o di lavoro.The RoleEntryPoint class includes methods that are called by Azure when it starts, runs, or stops a web or worker role. Facoltativamente, è possibile ignorare questi metodi per gestire l'inizializzazione, sequenze di arresto o il thread di esecuzione del ruolo.You can optionally override these methods to manage role initialization, role shutdown sequences, or the execution thread of the role.

Quando si estende RoleEntryPointè necessario tenere presente i seguenti comportamenti dei metodi:When extending RoleEntryPoint, you should be aware of the following behaviors of the methods:

  • I metodi OnStart e OnStop restituiscono un valore booleano ed è quindi possibile che da questi metodi venga restituito false.The OnStart and OnStop methods return a boolean value, so it is possible to return false from these methods.

    Se il codice restituisce falseil processo del ruolo viene interrotto improvvisamente, senza eseguire nessuna sequenza di arresto in programma.If your code returns false, the role process is abruptly terminated, without running any shutdown sequence you may have in place. In generale, è consigliabile evitare la restituzione di false dal metodo OnStart.In general, you should avoid returning false from the OnStart method.

  • Qualsiasi eccezione non rilevata all'interno di un overload di un metodo RoleEntryPoint viene considerato come un'eccezione non gestita.Any uncaught exception within an overload of a RoleEntryPoint method is treated as an unhandled exception.

    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.If an exception occurs within one of the lifecycle methods, Azure will raise the UnhandledException event, and then the process is terminated. Quando il ruolo viene portato offline, viene riavviato da Azure.After your role has been taken offline, it will be restarted by Azure. Quando si verifica un'eccezione non gestita, l’evento Stopping non viene generato e il metodo OnStop non viene chiamato.When an unhandled exception occurs, the Stopping event is not raised, and the OnStop method is not called.

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.If your role does not start, or is recycling between the initializing, busy, and stopping states, your code may be throwing an unhandled exception within one of the lifecycle events each time the role restarts. In questo caso, utilizzare l’evento UnhandledException per determinare la causa dell'eccezione e gestirla nel modo appropriato.In this case, use the UnhandledException event to determine the cause of the exception and handle it appropriately. Il ruolo potrebbe anche essere restituito dal metodo Run che causa il riavvio del ruolo.Your role may also be returning from the Run method, which causes the role to restart. Per ulteriori informazioni sugli stati di distribuzione, vedere problemi comuni che causano il riciclo dei ruoli.For more information about deployment states, see Common Issues Which Cause Roles to Recycle.

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.If you are using the Azure Tools for Microsoft Visual Studio to develop your application, the role project templates automatically extend the RoleEntryPoint class for you, in the WebRole.cs and WorkerRole.cs files.

Metodo OnStartOnStart method

Il metodo OnStart viene chiamato quando l'istanza del ruolo viene portata online da Azure.The OnStart method is called when your role instance is brought online by Azure. Mentre il codice OnStart viene eseguito, l'istanza del ruolo è contrassegnata come occupata e non verrà indirizzato alcun traffico esterno dal bilanciamento del carico.While the OnStart code is executing, the role instance is marked as Busy and no external traffic will be directed to it by the load balancer. È possibile eseguire l'override di questo metodo per eseguire operazioni di inizializzazione, ad esempio implementare i gestori eventi e avviare la diagnostica Azure.You can override this method to perform initialization work, such as implementing event handlers and starting Azure Diagnostics.

Se OnStart restituisce true, l'inizializzazione dell'istanza viene completata e Azure chiama il metodo RoleEntryPoint.Run.If OnStart returns true, the instance is successfully initialized and Azure calls the RoleEntryPoint.Run method. Se OnStart restituisce false, il ruolo termina immediatamente senza eseguire alcuna sequenza di arresto pianificata.If OnStart returns false, the role terminates immediately, without executing any planned shutdown sequences.

Il seguente esempio di codice illustra come eseguire l'override del metodo OnStart .The following code example shows how to override the OnStart method. 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:This method configures and starts a diagnostic monitor when the role instance starts and sets up a transfer of logging data to a storage account:

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 OnStopOnStop method

Il metodo OnStop viene chiamato quando un'istanza del ruolo viene portata offline da Azure e prima della chiusura del processo.The OnStop method is called after a role instance has been taken offline by Azure and before the process exits. È possibile eseguire l'override di questo metodo per chiamare il codice necessario affinché l'istanza del ruolo effettui un arresto normale.You can override this method to call code required for your role instance to cleanly shut down.

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.Code running in the OnStop method has a limited time to finish when it is called for reasons other than a user-initiated shutdown. 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.After this time elapses, the process is terminated, so you must make sure that code in the OnStop method can run quickly or tolerates not running to completion. Il metodo OnStop viene chiamato dopo la generazione dell'evento Stopping.The OnStop method is called after the Stopping event is raised.

Metodo RunRun method

È possibile eseguire l'override del metodo Run per implementare un thread a esecuzione prolungata per l'istanza del ruolo.You can override the Run method to implement a long-running thread for your role instance.

L’esecuzione dell'override del metodo Run non è obbligatoria, l'implementazione predefinita avvia un thread in costante stato di sospensione.Overriding the Run method is not required; the default implementation starts a thread that sleeps forever. Se si esegue l'override del metodo Run , il codice dovrebbe bloccarsi in modo indefinito.If you do override the Run method, your code should block indefinitely. Se il metodo Run restituisce un valore, il ruolo viene riciclato normalmente 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.If the Run method returns, the role is automatically gracefully recycled; in other words, Azure raises the Stopping event and calls the OnStop method so that your shutdown sequences may be executed before the role is taken offline.

Implementazione dei metodi del ciclo di vita ASP.NET per un ruolo webImplementing the ASP.NET lifecycle methods for a web role

È 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.You can use the ASP.NET lifecycle methods, in addition to those provided by the RoleEntryPoint class, to manage initialization and shutdown sequences for a web role. Potrebbe essere utile per motivi di compatibilità se si trasferisce un'applicazione ASP.NET esistente in Azure.This may be useful for compatibility purposes if you are porting an existing ASP.NET application to Azure. I metodi del ciclo di vita ASP.NET vengono chiamati dall'interno dei metodi RoleEntryPoint .The ASP.NET lifecycle methods are called from within the RoleEntryPoint methods. Il metodo Application_Start viene chiamato al termine del metodo RoleEntryPoint.OnStart.The Application_Start method is called after the RoleEntryPoint.OnStart method finishes. Il metodo Application_End viene chiamato prima del metodo RoleEntryPoint.OnStop.The Application_End method is called before the RoleEntryPoint.OnStop method is called.

Passaggi successiviNext steps

Informazioni su come creare un pacchetto del servizio cloud.Learn how to create a cloud service package.