Настройка жизненного цикла веб-роли или рабочей роли в .NET
Внимание
Облачные службы (классическая версия) теперь устарела для всех клиентов с 1 сентября 2024 года. Все существующие запущенные развертывания будут остановлены и завершены корпорацией Майкрософт, и данные будут окончательно потеряны начиная с октября 2024 года. Для новых развертываний следует использовать Облачные службы Azure с расширенной поддержкой. Это новая модель развертывания на основе Azure Resource Manager.
При создании рабочей роли вы расширяете класс RoleEntryPoint , который предоставляет методы для переопределения, которые позволяют реагировать на события жизненного цикла. Для веб-ролей этот класс является необязательным, поэтому его необходимо использовать для реагирования на события жизненного цикла.
Расширение класса RoleEntryPoint
Класс RoleEntryPoint включает в себя методы, вызываемые Azure при запуске, выполнении и остановке рабочей или веб-роли. Эти методы можно переопределить для управления инициализацией ролей, последовательностей завершения работы роли или потока выполнения роли.
При расширении RoleEntryPointнужно знать о следующих вариантах работы этих методов:
Метод OnStart возвращает логическое значение, поэтому можно вернуть значение false из этого метода.
Если код возвращает false, роль процесса немедленно завершается без запуска процессов завершения имеющихся последовательностей. В большинстве случаев нужно избегать возвращения значения false из метода OnStart.
При любом неперехваченном исключении при перегрузке RoleEntryPoint метод рассматривается как необработанное исключение.
Если исключение возникает в одном из методов жизненного цикла, Azure вызывает событие UnhandledException , а затем процесс завершается. После того как роль перейдет в автономный режим, Azure перезагрузит ее. При возникновении необработанного исключения событие "Остановка " не вызывается, а метод OnStop не вызывается.
Если ваша роль не запускается или перезапускается между инициализацией, занятой и остановкой состояний, код может вызывать необработанное исключение в одном из событий жизненного цикла при каждом перезапуске роли. В этом случае следует использовать событие UnhandledException , которое определит причину исключения и соответствующим образом ее обработает. Кроме того, ваша роль могла возвращаться из метода Run , что приводит к ее перезапуску. Узнать больше о состоянии развертывания можно в разделе Распространенные проблемы, которые вызывают повторное использование ролей.
Примечание.
Если для разработки приложения вы используете средства Azure для Microsoft Visual Studio, то шаблоны проекта роли автоматически расширяют класс RoleEntryPoint в файлах WebRole.cs и WorkerRole.cs.
Метод OnStart
Метод OnStart вызывается, когда Azure переводит экземпляр роли в сетевой режим. Пока выполняется код OnStart, экземпляр роли помечается как "Занят ", а подсистема балансировки нагрузки не направляет в него внешний трафик. Можно переопределить этот метод для выполнения инициализации, например для реализации обработчиков событий и запуска диагностики Azure.
Если OnStart возвращает значение true, то экземпляр инициализирован успешно и Azure вызывает метод RoleEntryPoint.Run. Если OnStart возвращает значение false, роль немедленно завершается без выполнения запланированных выключений.
В следующем примере кода показано, как переопределить метод OnStart . Этот метод настраивает и запускает монитор диагностики при запуске экземпляра роли и устанавливает передачу данных журналов в учетную запись хранилища:
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
Метод OnStop вызывается после того, как Azure принимает экземпляр роли в автономном режиме и перед завершением процесса. Можно переопределить этот метод с целью выполнения кода, необходимого для экземпляра роли и чистого завершения работы приложения.
Внимание
Код, выполняемый методом OnStop , имеет ограниченное время для завершения, когда вызов происходит по причинам, не связанным с завершением работы по инициативе пользователя. По истечении этого времени процесс завершается, поэтому убедитесь, что код в методе OnStop выполняется быстро и допускает неполное выполнение. Метод OnStop вызывается после генерирования события Stopping.
Метод запуска
Метод Run можно переопределить для реализации длительно выполняемого потока экземпляра роли.
Переопределение метода Run не требуется. Реализация по умолчанию запускает поток, который навсегда спит. При переопределении метода Run код должен быть заблокирован на неопределенное время. Если метод Run возвращается, роль автоматически перезапускается. Другими словами, Azure вызывает событие Остановки и вызывает метод OnStop, чтобы последовательности завершения работы могли выполняться до того, как роль будет отключена.
Реализация методов жизненного цикла ASP.NET для веб-роли
Вы можете использовать методы жизненного цикла ASP.NET в дополнение к методам, предоставляемым классом RoleEntryPoint , для управления инициализацией и завершением работы для веб-роли. Этот подход может быть полезен в целях совместимости, если вы переносите существующее приложение ASP.NET в Azure. Методы жизненного цикла ASP.NET вызываются из методов RoleEntryPoint . Метод Application_Start вызывается сразу после завершения метода RoleEntryPoint.OnStart. Метод Application_End выполняется перед вызовом метода RoleEntryPoint.OnStop.
Следующие шаги
Узнайте, как создать пакет облачной службы.