Udostępnij za pośrednictwem


Dostosowywanie cyklu życia roli Sieć Web lub Proces roboczy na platformie .NET

Ważne

Usługi Cloud Services (wersja klasyczna) są teraz przestarzałe dla wszystkich klientów od 1 września 2024 r. Wszystkie istniejące uruchomione wdrożenia zostaną zatrzymane i zamknięte przez firmę Microsoft, a dane zostaną trwale utracone od października 2024 r. Nowe wdrożenia powinny używać nowego modelu wdrażania opartego na usłudze Azure Resource Manager w usługach Azure Cloud Services (wsparcie dodatkowe).

Podczas tworzenia roli procesu roboczego rozszerzysz klasę RoleEntryPoint , która udostępnia metody zastąpienia, które umożliwiają reagowanie na zdarzenia cyklu życia. W przypadku ról sieci Web ta klasa jest opcjonalna, dlatego należy jej użyć do reagowania na zdarzenia cyklu życia.

Rozszerzanie klasy RoleEntryPoint

Klasa RoleEntryPoint zawiera metody wywoływane przez platformę Azure podczas uruchamiania, uruchamiania lub zatrzymywania roli sieci Web lub procesu roboczego. Opcjonalnie można zastąpić te metody w celu zarządzania inicjowaniem roli, zamykaniem sekwencji ról lub wątkiem wykonywania roli.

Podczas rozszerzania programu RoleEntryPoint należy pamiętać o następujących zachowaniach metod:

  • Metoda OnStart zwraca wartość logiczną, więc można zwrócić wartość false z tej metody.

    Jeśli kod zwraca wartość false, proces roli jest nagle zakończony, bez uruchamiania żadnej sekwencji zamykania, którą można mieć na miejscu. Ogólnie rzecz biorąc, należy unikać zwracania wartości false z metody OnStart .

  • Wszelkie nieprzechwycone wyjątki w przeciążeniu metody RoleEntryPoint są traktowane jako nieobsługiwany wyjątek.

    Jeśli wyjątek występuje w jednej z metod cyklu życia, platforma Azure zgłasza zdarzenie UnhandledException , a następnie proces zostanie zakończony. Po przejściu roli w tryb offline platforma Azure ją ponownie uruchomi. W przypadku wystąpienia nieobsługiwanego wyjątku zdarzenie Zatrzymywanie nie jest wywoływane, a metoda OnStop nie jest wywoływana.

Jeśli rola nie zostanie uruchomiona lub jest recyklingu między stanami inicjowania, zajętości i zatrzymywania, kod może zgłaszać nieobsługiwany wyjątek w ramach jednego ze zdarzeń cyklu życia za każdym razem, gdy rola zostanie ponownie uruchomiona. W takim przypadku użyj zdarzenia UnhandledException , aby określić przyczynę wyjątku i odpowiednio go obsłużyć. Rola może również zostać zwrócona z metody Run , co powoduje ponowne uruchomienie roli. Aby uzyskać więcej informacji na temat stanów wdrożenia, zobacz Typowe problemy, które powodują odtwarzanie ról.

Uwaga

Jeśli używasz narzędzi platformy Azure dla programu Microsoft Visual Studio do tworzenia aplikacji, szablony projektów ról automatycznie rozszerzają klasę RoleEntryPoint w plikach WebRole.cs i WorkerRole.cs .

OnStart, metoda

Metoda OnStart jest wywoływana, gdy wystąpienie roli zostanie przeniesione w tryb online przez platformę Azure. Podczas wykonywania kodu OnStart wystąpienie roli jest oznaczone jako Zajęte , a moduł równoważenia obciążenia nie kieruje do niego żadnego ruchu zewnętrznego. Tę metodę można zastąpić, aby wykonać zadania inicjowania, takie jak implementowanie procedur obsługi zdarzeń i uruchamianie Diagnostyka Azure.

Jeśli funkcja OnStart zwróci wartość true, wystąpienie zostało pomyślnie zainicjowane, a platforma Azure wywołuje metodę RoleEntryPoint.Run . Jeśli funkcja OnStart zwraca wartość false, rola zostanie natychmiast zakończona bez wykonywania jakichkolwiek planowanych sekwencji zamknięcia.

Poniższy przykład kodu pokazuje, jak zastąpić metodę OnStart . Ta metoda konfiguruje i uruchamia monitor diagnostyczny po uruchomieniu wystąpienia roli i skonfigurowaniu transferu danych rejestrowania na konto magazynu:

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

OnStop, metoda

Metoda OnStop jest wywoływana po przełączeniu wystąpienia roli na platformę Azure w tryb offline i przed zakończeniem procesu. Tę metodę można zastąpić, aby wywołać kod wymagany do czystego zamknięcia wystąpienia roli.

Ważne

Kod uruchomiony w metodzie OnStop ma ograniczony czas do zakończenia, gdy jest wywoływany z powodów innych niż zamknięcie zainicjowane przez użytkownika. Po upływie tego czasu proces zostanie zakończony, dlatego należy upewnić się, że kod w metodzie OnStop może działać szybko lub tolerować brak działania do ukończenia. Metoda OnStop jest wywoływana po wywołaniu zdarzenia Zatrzymanie.

Run, metoda

Możesz zastąpić metodę Run, aby zaimplementować długotrwały wątek dla wystąpienia roli.

Zastępowanie metody Run nie jest wymagane. Domyślna implementacja uruchamia wątek, który jest w trybie uśpienia na zawsze. Jeśli zastąpisz metodę Run , kod powinien blokować się na czas nieokreślony. Jeśli metoda Run zwraca, rola jest automatycznie odzyskiwana. Innymi słowy platforma Azure zgłasza zdarzenie Zatrzymanie i wywołuje metodę OnStop, aby sekwencje zamykania mogły zostać wykonane przed przełączenie roli w tryb offline.

Implementowanie metod cyklu życia ASP.NET dla roli sieci Web

Można użyć metod cyklu życia ASP.NET, oprócz metod udostępnianych przez klasę RoleEntryPoint , do zarządzania sekwencjami inicjowania i zamykania roli sieci Web. Takie podejście może być przydatne w celach zgodności, jeśli przenosisz istniejącą aplikację ASP.NET na platformę Azure. Metody cyklu życia ASP.NET są wywoływane z metod RoleEntryPoint . Metoda Application_Start jest wywoływana po zakończeniu metody RoleEntryPoint.OnStart . Metoda Application_End jest wywoływana przed wywołaniem metody RoleEntryPoint.OnStop .

Następne kroki

Dowiedz się, jak utworzyć pakiet usługi w chmurze.