De levenscyclus van een web- of werkrol in .NET aanpassen

Belangrijk

Cloud Services (klassiek) is nu afgeschaft voor nieuwe klanten en wordt op 31 augustus 2024 voor alle klanten buiten gebruik gesteld. Nieuwe implementaties moeten gebruikmaken van het nieuwe implementatiemodel op basis van Azure Resource Manager Azure Cloud Services (uitgebreide ondersteuning).

Wanneer u een werkrol maakt, breidt u de klasse RoleEntryPoint uit. Deze biedt methoden voor het overschrijven waarmee u kunt reageren op levenscyclus gebeurtenissen. Voor webrollen is deze klasse optioneel, dus u moet deze gebruiken om te reageren op levenscyclus gebeurtenissen.

De roleEntryPoint-klasse uitbreiden

De klasse RoleEntryPoint bevat methoden die door Azure worden aangeroepen wanneer een web- of werkrol wordt gestart, uitgevoerd of gestopt . U kunt deze methoden desgewenst overschrijven voor het beheren van rol initialisatie, afsluitreeksen voor rollen of de uitvoeringsthread van de rol.

Wanneer u RoleEntryPoint uitbreidt, moet u rekening houden met het volgende gedrag van de methoden:

  • De onstart-methode retourneert een booleaanse waarde, dus het is mogelijk om onwaar te retourneren van deze methode.

    Als uw code onwaar retourneert, wordt het rolproces abrupt beëindigd, zonder dat er een afsluitvolgorde wordt uitgevoerd die u mogelijk hebt ingesteld. Over het algemeen moet u voorkomen dat onwaar wordt geretourneerd vanuit de OnStart-methode .

  • Elke niet-besproken uitzondering binnen een overload van een RoleEntryPoint-methode wordt behandeld als een onverwerkte uitzondering.

    Als er een uitzondering optreedt binnen een van de levenscyclusmethoden, genereert Azure de gebeurtenis UnhandledException en wordt het proces beëindigd. Nadat uw rol offline is gehaald, wordt deze opnieuw gestart door Azure. Wanneer een onverwerkte uitzondering optreedt, wordt de gebeurtenis Stoppen niet gegenereerd en wordt de methode OnStop niet aangeroepen.

Als uw rol niet start of wordt gerecycled tussen de status Initialiseren, Bezet en Stoppen, genereert uw code mogelijk een onverwerkte uitzondering binnen een van de levenscyclusgebeurtenissen telkens wanneer de rol opnieuw wordt gestart. In dit geval gebruikt u de gebeurtenis UnhandledException om de oorzaak van de uitzondering te bepalen en deze op de juiste manier af te handelen. Uw rol wordt mogelijk ook geretourneerd door de methode Uitvoeren , waardoor de rol opnieuw wordt gestart. Zie Veelvoorkomende problemen die ertoe leiden dat rollen worden gerecycled voor meer informatie over implementatiestatussen.

Notitie

Als u de Azure-hulpprogramma's voor Microsoft Visual Studio gebruikt om uw toepassing te ontwikkelen, wordt met de rolprojectsjablonen automatisch de roleEntryPoint-klasse voor u uitgebreid in de bestanden WebRole.cs en WorkerRole.cs .

Methode OnStart

De OnStart-methode wordt aangeroepen wanneer uw rolinstantie online wordt gebracht door Azure. Terwijl de OnStart-code wordt uitgevoerd, wordt het rolexemplaar gemarkeerd als Bezet en wordt er geen extern verkeer naar de instantie geleid door de load balancer. U kunt deze methode overschrijven om initialisatiewerkzaamheden uit te voeren, zoals het implementeren van gebeurtenis-handlers en het starten van Azure Diagnostics.

Als OnStarttrue retourneert, is het exemplaar geïnitialiseerd en roept Azure de methode RoleEntryPoint.Run aan. Als OnStartonwaar retourneert, wordt de rol onmiddellijk beëindigd, zonder geplande afsluitreeksen uit te voeren.

In het volgende codevoorbeeld ziet u hoe u de OnStart-methode overschrijft. Met deze methode wordt een diagnostische monitor geconfigureerd en gestart wanneer het rolexemplaar wordt gestart en een overdracht van logboekgegevens naar een opslagaccount wordt ingesteld:

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;
}

Methode OnStop

De methode OnStop wordt aangeroepen nadat een rolinstantie offline is gehaald door Azure en voordat het proces wordt afgesloten. U kunt deze methode overschrijven om code aan te roepen die vereist is voor het netjes afsluiten van uw rolinstantie.

Belangrijk

Code die wordt uitgevoerd in de OnStop-methode heeft een beperkte tijd om te voltooien wanneer deze wordt aangeroepen om andere redenen dan een door de gebruiker geïnitieerde afsluiting. Nadat deze tijd is verstreken, wordt het proces beëindigd, dus u moet ervoor zorgen dat code in de OnStop-methode snel kan worden uitgevoerd of tolereert dat deze niet wordt voltooid. De methode OnStop wordt aangeroepen nadat de gebeurtenis Stoppen is gegenereerd.

Methode Uitvoeren

U kunt de Run-methode overschrijven om een langlopende thread voor uw rolinstantie te implementeren.

Het overschrijven van de Run-methode is niet vereist; de standaard implementatie start een thread die voor altijd in de slaapstand blijft. Als u de methode Uitvoeren overschrijft, moet uw code voor onbepaalde tijd worden geblokkeerd. Als de Run-methode retourneert, wordt de rol automatisch probleemloos gerecycled; Met andere woorden, Azure genereert de stopgebeurtenis en roept de methode OnStop aan, zodat uw afsluitreeksen kunnen worden uitgevoerd voordat de rol offline wordt gehaald.

De ASP.NET levenscyclusmethoden voor een webrol implementeren

U kunt de ASP.NET levenscyclusmethoden gebruiken, naast die van de roleEntryPoint-klasse , om initialisatie- en afsluitreeksen voor een webrol te beheren. Dit kan handig zijn voor compatibiliteitsdoeleinden als u een bestaande ASP.NET-toepassing overgezet naar Azure. De ASP.NET levenscyclusmethoden worden aangeroepen vanuit de RoleEntryPoint-methoden . De methode Application_Start wordt aangeroepen nadat de methode RoleEntryPoint.OnStart is voltooid. De methode Application_End wordt aangeroepen voordat de methode RoleEntryPoint.OnStop wordt aangeroepen.

Volgende stappen

Meer informatie over het maken van een cloudservicepakket.