Personalizar o ciclo de vida de uma função Web ou de trabalho no .NET

Importante

Os Serviços de Nuvem (clássicos) agora foram preteridos para novos clientes e serão desativados em 31 de agosto de 2024 para todos os clientes. As novas implantações devem usar o novo modelo de implantação baseado no Azure Resource Manager Serviços de Nuvem do Azure (suporte estendido) .

Quando você cria uma função de trabalho, estende a classe RoleEntryPoint que oferece métodos a serem substituídos, permitindo que você responda a eventos de ciclo de vida. Para funções Web, essa classe é opcional e, portanto, deve ser usada para responder a eventos de ciclo de vida.

Estender a classe RoleEntryPoint

A classe RoleEntryPoint inclui métodos chamados pelo Azure quando ele inicia, executa ou para uma função Web ou de trabalho. Opcionalmente, você pode substituir esses métodos para gerenciar a inicialização de função, as sequências de desligamento de função ou o thread de execução da função.

Ao estender RoleEntryPoint, você deve estar atento aos seguintes comportamentos dos métodos:

  • O método OnStart retorna um valor booliano, então é possível retornar false desse método.

    Se seu código retornar false, o processo da função será encerrado abruptamente, sem executar nenhuma sequência de desligamento que possa existir. Em geral, você deve evitar o retorno de false do método OnStart.

  • Qualquer exceção não percebida dentro de uma sobrecarga de um método RoleEntryPoint é considerada uma exceção não tratada.

    Se ocorrer uma exceção em um dos métodos do ciclo de vida, o Azure acionará o evento UnhandledException e o processo será encerrado. Depois que sua função ficar offline, ela será reiniciada pelo Azure. Quando ocorre uma exceção não tratada, o evento Stopping não é acionado e o método OnStop não é chamado.

Se a sua função não for iniciada, ou se estiver reciclando os estados de inicialização, ocupado e de parada, seu código pode estar lançando uma exceção sem tratamento em um dos eventos do ciclo de vida sempre que a função é reiniciada. Neste caso, use o evento UnhandledException para determinar a causa da exceção e trate-a adequadamente. Sua função também pode estar retornando do método Run , que faz com que a função reinicie. Para obter mais informações sobre os estados de implantação, confira Problemas comuns que causam a reciclagem de funções.

Observação

Se você estiver usando as Ferramentas do Azure para o Microsoft Visual Studio para desenvolver seu aplicativo, os modelos de projeto de função estenderão automaticamente a classe RoleEntryPoint para você nos arquivos WebRole.cs e WorkerRole.cs.

Método OnStart

O método OnStart é chamado quando sua instância de função é trazida online pelo Azure. Durante a execução do código OnStart, a instância de função é marcada como Ocupada e o balanceador de carga não direcionará nenhum tráfego externo para ela. Você pode substituir esse método para executar um trabalho de inicialização, como a implementação de manipuladores de eventos e a inicialização do Diagnóstico do Azure.

Se OnStart retornar true, a instância será inicializada com êxito e o Azure chamará o método RoleEntryPoint.Run. Se OnStart retornar false, a função será imediatamente encerrada sem executar nenhuma sequência de desligamento planejada.

O exemplo de código a seguir mostra como substituir o método OnStart. Esse método configura e inicia um monitor de diagnóstico quando a instância de função é iniciada e configura uma transferência de dados de log para uma conta de armazenamento:

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

Método OnStop

O método OnStop é chamado depois que uma instância de função foi colocada offline pelo Azure e antes de o processo sair. Você pode substituir esse método para chamar o código necessário para que a instância de função seja desligada corretamente.

Importante

O código que está sendo executado no método OnStop método tem uma hora limitada para concluir quando é chamado para razões diferentes de um desligamento iniciado pelo usuário. Depois que esta hora decorrer, o processo é finalizado e, portanto, você deverá ter certeza de que aquele código no método OnStop pode ser executado rapidamente ou tolerar a não execução até o final. O método OnStop é chamado depois que o evento Stopping é gerado.

Método Run

Você pode anular o método Run para implementar um thread longo para sua instância de função.

Substituir o método Run não é necessário; a implementação padrão inicia um thread que está sempre em suspensão. Se você substituir o método Run, seu código deverá ser bloqueado indefinidamente. Se o método Run retornar, a função será reciclada automaticamente normalmente; em outras palavras, o Azure ocasiona o evento Stopping e chama o método OnStop para que as sequências de desligamento possam ser executadas antes de a função ser colocada offline.

Implementando os métodos de ciclo de vida do ASP.NET para uma função Web

Você pode usar os métodos de ciclo de vida do ASP.NET, além dos fornecidos pela classe RoleEntryPoint, gerenciar a inicialização e as sequências de desligamento para uma função Web. Isso poderá ser útil para fins de compatibilidade se você estiver portando um aplicativo ASP.NET existente para o Azure. Os métodos do ciclo de vida do ASP.NET são chamados de dentro dos métodos RoleEntryPoint. O método Application_Start é chamado depois que o método RoleEntryPoint.OnStart é concluído. O método Application_End é chamado antes do método RoleEntryPoint.OnStop.

Próximas etapas

Saiba como criar um pacote de serviços de nuvem.