Windows Azure permette oltre all'esposizioni di servizi per il deposito di dati, di code e file, di creare applicazioni, dette ruoli, di due tipologie: web e worker.
Entrambe le tipologie si differenziano dalle normali applicazioni ASP.NET e dai servizi Windows solo dall'ambiente in cui vengono eseguiti. Oltre al sistema di configurazione che hanno a disposizione, contengono un punto di ingresso rappresentato dalla classe astratta RoleEntryPoint.
I metodi virtuali OnStart e OnStop permettono di eseguire le operazioni di startup o di chiusura dell'applicazione, come solitamente sono le operazioni di caricamento delle configurazioni, del logging o dell'intercettazione degli eventi di sistema.
Nel template di progetto del SDK è possibile trovare già implementato il metodo OnStart:
public class WebRole : RoleEntryPoint { public override bool OnStart() { // For information on handling configuration changes // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. RoleEnvironment.Changing += RoleEnvironmentChanging; return base.OnStart(); } public override void OnStop() { base.OnStop(); } }
Il metodo OnStart restituisce true/false per indicare l'esito dell'avvio. Se restituisce false il processo viene terminato immediatamente senza effettuare altri tentativi. Nel caso invece venga lanciata un'eccezione (così come nel metodo Run dei worker role) il ruolo termina con il ciclo di shutdown e vengono effettuati tentativi di riavvio del ruolo. Dal portale è possibile accorgersi di problemi all'avvio perché lo stato passa in continuazione da suspended a starting.
Il metodo OnStop invece ha a disposizione 30 secondi per effettuare le operazioni di chiusura, solitamente di persistenza di stati o flush di dati. Il Dispose degli oggetti non rientra fra queste operazioni, dato che il processo viene chiuso e per la finalizzazione degli oggetti si occupa il garbage collector.
Da notare infine che non vi è alcuna configurazione che indica qual è la classe da chiamare per l'avvio. E' sufficiente inserire nel progetto principale una classe che implementi la classe astratta RoleEntryPoint. Nel caso più di una classe sia presente, solo una tra queste (in modo non determinabile) verrà chiamata.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Utilizzare Copilot con Azure Cosmos DB
Migliora la resilienza delle applicazioni con .NET e Azure Container Apps
Migrate and Modernize your .NET Applications on Azure
Eseguire una query su SQL Azure tramite un workflow di GitHub
Gestire i dati con Azure Cosmos DB Data Explorer
Sfruttare MQTT in cloud e in edge con Azure Event Grid
Cambiare la chiave di partizionamento di Azure Cosmos DB
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Utilizzare Azure AI Studio per testare i modelli AI
Utilizzare un service principal per accedere a Azure Container Registry
Proteggere le risorse Azure con private link e private endpoints
I più letti di oggi
- Build 2016: segui con noi in live streaming!
- Build 2017: segui con noi tutte le novità mercoledì 10 e giovedì 11 maggio da Seattle!
- Microsoft Visual Studio Code: un nuovo editor gratuito per Windows, MacOSX e Linux per sviluppatori ASP.NET e Node.js
- Usare gRPC come infrastruttura per i nostri servizi web
- Utilizzare QuickGrid di Blazor con Entity Framework
- Realizzare una Progressive Web Application con Blazor e ASP.NET Core
- Abilitare e gestire il prerendering nelle applicazioni Blazor WebAssembly
- ASP.NET 4.5 e Visual Studio 2012 Live - Online
- Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
- Gestire la cancellazione di una richiesta in streaming da Blazor