Экспорт (0) Печать
Развернуть все

Компиляция приложения для запуска в облачной службе Windows Azure

Обновлено: Декабрь 2013 г.

Приложение, спроектированное как облачная служба Windows Azure, состоит из различных вычислительных ресурсов, которые совместно обрабатывают данные и взаимодействуют друг с другом и внешним миром. Облачная служба Windows Azure может содержать 5 определений ролей следующих типов:

  • Веб-роль — компонент службы, который настроен для программирования веб-приложения с поддержкой служб IIS 7 и ASP.NET. Веб-роль служит интерфейсом к облачной службе.

  • Рабочая роль — компонент службы, используемый для общей разработки и выполнения фоновых задач для веб-роли. Рабочая роль часто используется для длительных неинтерактивных задач, в этой роли можно размещать любые типы рабочих нагрузок.

Принципы использования ролей в приложении:

В Windows Azure веб-роль содержит веб-сайты или другой код, поддерживаемый службами IIS. Обычно это страница ASPX или веб-служба, но можно использовать и другие средства веб-разработки, например препроцессор гипертекста (PHP). Веб-роль ASP.NET в Windows Azure аналогична веб-приложению ASP.NET в том плане, что строится при помощи файлов ASPX и исходного кода, но она также включает дополнительные средства для запуска роли в Windows Azure. Дополнительные сведения о веб-проектах ASP.NET см. в разделе Веб-проекты ASP.NET.

В веб-роли также могут размещаться большинство других приложений, которые работают по HTTP-протоколу, например служба WCF со схемой basicHttpBinding. Дополнительные сведения см. в разделе basicHttpBinding. Средства Windows Azure для Microsoft Visual Studio предоставляют шаблоны для упрощения разработки подобных приложений. Загрузить эти инструменты можно со страницы Загрузки для Windows Azure.

Основное различие между веб-ролью и рабочей ролью — поддержка служб IIS. Веб-роль спроектирована для представления интерфейса с помощью веб-сайтов и веб-приложений, размещенных в IIS. В отличие от нее, рабочая роль может выполнять любые задачи. Большинство типов приложений можно разместить в рабочей роли, включая те, в которых используется языки не из платформы .NET или применяется неуправляемый код.

К некоторым из этих отличий относится следующее.

  • Веб-роль с помощью IIS обеспечивает представление интерфейса конечному пользователю. В рабочей роли можно написать код, который также представит интерфейс пользователю, однако использование веб-роли упрощает создание подобного приложения.

  • В веб-роли службы IIS используют многопоточность автоматически. В рабочей роли разработчик должен сам учитывать нюансы работы с потоками.

  • Необходимо обеспечить метод запуска, который вызывается в начале обработки.

  • Периметр безопасности для веб-роли и рабочей роли различен. В веб-роли списки управления доступом (списки ACL) для сертификатов заданы по умолчанию (для поддержки IIS и сетевых служб). При использовании рабочей роли необходимо вручную задать списки управления доступом для обеспечения разрешений, которые требуются приложению.

Обычно рабочая роль применяется для следующих видов задач:

  • Долго выполняемые асинхронные задачи, пользователь обычно не ждет их завершения.

  • Размещение служб ведущего приложения, для которых не нужен пользовательский интерфейс.

  • Фоновые службы, прослушивающие очередь.

  • Запуск служб на основе TCP.

  • Выполнение интенсивных по вычислениям заданий.

В пакете Windows Azure SDK веб-роли получают полный доступ к большим возможностям IIS. При создании приложения для Windows Azure она настраивается на использование полных возможностей IIS. Дополнительные сведения о веб-ролях и IIS см. в разделе Настройка веб-сервера для предоставления содержимого (IIS 7.0).

Веб-роли включают следующее.

  • Поддержка нескольких веб-сайтов и приложений в одном экземпляре веб-роли. Дополнительные сведения о настройке веб-роли для размещения несколько сайтов см. в разделе Настройка веб-роли для нескольких веб-сайтов.

  • Поддержка задач конфигурации, выполняемых при запуске. Дополнительные сведения о задачах запуска см. в разделе Настройка компонентов IIS в Windows Azure.

  • Запуск веб-сайтов и приложений прямо в IIS.

  • Использование доменов приложения в стандартном режиме IIS.

Можно управлять реакцией роли на ее запуск, выполнение и остановку. Для этого служит следующий класс.

Класс RoleEntryPoint включает методы, которые вызываются Windows Azure при запуске, выполнении или остановке рабочей роли или веб-роли. При необходимости можно переопределить эти методы для управления инициализацией роли, последовательностями завершения работы роли или потоком выполнения роли. Для рабочей роли требуется расширение класса RoleEntryPoint. Для веб-роли расширение класса RoleEntryPoint необязательно.

При расширении класса RoleEntryPoint следует помнить о поведении следующих методов.

  • Методы OnStart и OnStop возвращают логическое значение, поэтому можно возвращать false.

    Если код возвращает значение false, то роль процесса немедленно завершается без выполнения какой-либо последовательности завершения работы. В целом не следует возвращать false из метода OnStart.

  • Любое непойманное исключение из перегрузки метода RoleEntryPoint считается необработанным исключением.

    Если исключение возникнет в одном из методов жизненного цикла, то Windows Azure отправит событие UnhandledException и завершит процесс. После выключения роли Windows Azure перезагрузит ее. При возникновении необработанного исключения отправляется событие Stopping, при этом метод OnStop не вызывается.

Если роль не запускается и повторно запускается в ходе этапов инициализации, остановки или занятости, то, возможно, код при перезапуске роли каждый раз вызывает необработанное исключение в одном из событий жизненного цикла. В этом случае используйте событие UnhandledException для определения причины исключения и его обработки. Возможно, роль также возвращает значение из метода Run, что приводит к перезапуску роли. Дополнительные сведения о состоянии развертывания см. в разделе Распространенные проблемы, которые вызывают повторное использование ролей.

noteПримечание
При использовании Windows Azure Tools for Microsoft Visual Studio для разработки приложения шаблоны проекта роли автоматически расширяют класс RoleEntryPoint в файлах WebRole.cs и WorkerRole.cs.

Вы можете внести изменения в жизненный цикл роли с помощью следующих методов класса RoleEntryPoint.

Метод OnStart вызывается при запуске экземпляра роли в Windows Azure. Пока выполняется код метода OnStart, экземпляр роли помечается как занятый (Busy), при этом подсистема балансировки нагрузки не направляет к нему внешний трафик. Можно переопределить этот метод для выполнения инициализации, например для реализации обработчиков событий и запуска Windows Azure Diagnostics. Дополнительные сведения о диагностике см. в разделе Сбор данных журналов с помощью средств диагностики Windows Azure.

Если метод OnStart возвращает значение true, то экземпляр инициализирован успешно и Windows 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 base.OnStart();
}

Метод OnStop выполняется после выключения экземпляра роли и до завершения процесса. Можно переопределить этот метод, чтобы выполнить код, необходимый для чистого завершения работы приложения.

ImportantВажно!
Код, исполняемый в методе OnStop, имеет ограниченное время на свое выполнение, если он вызван не после действия пользователя. По истечению данного времени процесс завершается, поэтому необходимо убедиться в том, что код в методе OnStop выполнятся быстро и будет допустимо, если он не выполнится до конца. Метод OnStop вызывается после отправки события Stopping.

Можно переопределить метод Run для реализации длительно выполняемого потока для экземпляра роли.

Переопределение метода Run не обязательно. Реализация по умолчанию запускает постоянно спящий поток. В случае переопределения метода Run код должен выполняться бесконечно. Если метод Run возвращает управление, то роль автоматически перезапускается; другими словами, Windows Azure отправляет событие Stopping и вызывает метод OnStop, чтобы выполнить последовательность завершения работы до выключения роли.

Для управления жизненным циклом роли можно использовать методы ASP.NET в дополнение к тем, которые предоставляет класс RoleEntryPoint. Это может оказаться полезным для обеспечения совместимости при переносе существующего приложения ASP.NET в Windows Azure. Методы жизненного цикла ASP.NET вызываются из методов RoleEntryPoint. Метод Application_Start вызывается сразу после завершения метода RoleEntryPoint.OnStart. Метод Application_End выполняется перед вызовом метода RoleEntryPoint.OnStop.

Один из наиболее распространенных шаблонов приложения в Windows Azure заключается в следующем: веб-роль получает входящие запросы и использует очереди Windows Azure для их передачи на обработку в экземпляры рабочей роли. Рабочая роль периодически просматривает очередь на наличие сообщений, которые можно обработать. Если такое сообщение есть, рабочая роль выполняет задачу. Веб-роль обычно забирает результаты выполненной работы из постоянного хранилища, например из большого двоичного объекта или таблицы. Этот распространенный шаблон проектирования приводится на следующей диаграмме.

Взаимодействие ролей через очереди

Дополнительные сведения об использовании служб хранилища см. в разделе Хранилище.

См. также

Показ:
© 2014 Microsoft