Разработка и развертывание веб-заданий с помощью Visual Studio

В этом разделе объясняется, как использовать Visual Studio для развертывания проекта консольного приложения в веб-приложении Службы приложений в качестве Веб-задания Azure. Дополнительные сведения о развертывании веб-заданий с использованием Портала Azure см. в руководстве Выполнение фоновых задач с помощью веб-заданий в Службе приложений Azure.

Можно выбрать разработку веб-задания, которое выполняется как приложение .NET Core или как приложение платформы .NET Framework. Версия 3.x пакета SDK для веб-заданий Azure позволяет разрабатывать веб-задания, которые выполняются как приложения .NET Core или как приложения платформы .NET Framework, а версия 2.x поддерживает только платформу .NET Framework. Способ развертывания проекта веб-заданий отличается для проектов .NET Core, а не для проектов платформы .NET Framework.

В одном веб-приложении можно опубликовать несколько заданий, при условии что каждое веб-задание имеет уникальное имя.

Веб-задания в виде консольных приложений .NET Core

В версии 3.x пакета SDK веб-заданий Azure можно создавать и публиковать веб-задания в виде консольных приложений .NET Core. Пошаговые инструкции по созданию и публикации консольного приложения .NET Core в Azure в качестве веб-задания см. в разделе Начало работы с пакетом SDK Azure WebJobs для фоновой обработки на основе событий.

Примечание

Веб-приложения и (или) веб-задания .NET Core не могут быть связаны с веб-проектами. Если вы хотите развернуть веб-задание в веб-приложении, создайте его в виде консольного приложения платформы .NET Framework.

Развертывание в службе приложений Azure

Публикация веб-задания .NET Core в Службе приложений Azure из Visual Studio использует те же средства, что и публикация ASP.NET Core приложения.

  1. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите пункт Опубликовать.

  2. В диалоговом окне Публикация выберите Azure в качестве параметра Целевой объект, а затем нажмите Далее.

  3. Выберите Веб-задания Azure в качестве параметра Указанный целевой объект, а затем нажмите Далее.

  4. Над элементом App Service instances (Экземпляры Службы приложений) нажмите кнопку со знаком плюс ( + ), чтобы открыть окно Create a new Azure WebJob (Создание веб-задания Azure).

  5. В диалоговом окне Служба приложений (Windows) задайте параметры размещения, которые указаны в следующей таблице.

    Параметр Рекомендуемое значение Описание
    имя; Глобально уникальное имя Имя, которое однозначно идентифицирует новое приложение-функцию.
    Подписка Выберите свою подписку Подписка Azure, которую нужно использовать.
    Группа ресурсов myResourceGroup Имя группы ресурсов, в которой будет создано приложение-функция. Чтобы создать группу ресурсов, выберите Создать.
    План размещения План службы приложений План службы приложений указывает расположение, размер и функции фермы веб-серверов, в которой размещается приложение. Вы можете сэкономить средства при размещении нескольких приложений, настроив совместное использование одного плана службы приложений в веб-приложениях. Планы службы приложений определяют регион, размер экземпляра, степень масштабирования и SKU ("Бесплатный", "Общий", "Базовый", "Стандартный" или "Премиум"). Выберите Создать, чтобы создать новый план службы приложений Уровни "Бесплатный" и "Базовый" не поддерживают функцию Always On, чтобы обеспечить непрерывную работу сайта.

    Диалоговое окно

  6. Выберите Создать, чтобы создать веб-задание и связанные с ним ресурсы в Azure с заданными параметрами, а также развернуть код проекта.

  7. Чтобы вернуться на страницу Публикация, выберите Готово.

Веб-задания как консольные приложения платформы .NET Framework

Если вы используете Visual Studio для развертывания проекта консольного приложения .NET Framework с поддержкой веб-заданий, программа копирует файлы среды выполнения в соответствующую папку в веб-приложении (App_Data/jobs/continuous для непрерывных веб-заданий и App_Data/jobs/triggered для запланированных или выполняемых по требованию веб-заданий).

Visual Studio добавляет следующие элементы в проект с поддержкой веб-заданий:

Диаграмма, отображающая добавленные элементы в приложение консоли для реализации развертывания как веб-задания

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

Можно развернуть проект как веб-задание или связать его с веб-проектом для автоматического развертывания при каждом развертывании веб-проекта. Чтобы связать проекты, Visual Studio включает имя проекта с поддержкой веб-заданий в файле webjobs-list.json веб-проекта.

Диаграмма, отображающая проект веб-задания, связанный с веб-проектом

Предварительные требования

Установите Visual Studio 2022 с рабочей нагрузкой "Разработка для Azure".

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

Имеются две возможности.

  • Включение автоматического развертывания с веб-проектом.

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

  • Включение развертывания без веб-проекта.

    Настройка существующего проекта приложения консоли для развертывания в качестве веб-задания без ссылки на веб-проект. Используйте этот параметр, если нужно запустить веб-задание в веб-приложении самостоятельно, без веб-приложения, запущенного в веб-приложении. Это может потребоваться для масштабирования ресурсов веб-заданий независимо от ресурсов веб-приложений.

  1. Щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Добавить>Существующий проект как веб-задание Azure.

    Существующий проект как веб-задание Azure

    Откроется диалоговое окно Добавление веб-задания Azure .

  2. В раскрывающемся списке Имя проекта выберите проект консольного приложения для добавления в качестве веб-задания.

    Выбор проекта в диалоговом окне

  3. Заполните диалоговое окно Добавление веб-задания Azure и щелкните кнопку ОК.

  1. Щелкните правой кнопкой мыши проект консольного приложения в Обозревателе решений и выберите Опубликовать как веб-задание Azure.

    Опубликовать как веб-задание Azure

    Появится диалоговое окно Добавление веб-задания Azure с проектом, выбранным в поле Имя проекта .

  2. Заполните диалоговое окно Добавление веб-задания Azure и щелкните кнопку ОК.

    Откроется мастер веб-публикации . Если вы не хотите сразу выполнить публикацию, закройте мастер. Указанные параметры сохраняются до момента развертывания проекта.

Создание нового проекта с поддержкой веб-заданий

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

Примечание

Шаблон нового проекта веб-задания автоматически устанавливает пакеты NuGet и включает в файл Program.cs код для пакета SDK веб-заданий. Если вы не хотите использовать пакет SDK для веб-заданий, удалите или измените инструкцию host.RunAndBlock в файле Program.cs.

  1. Выберите File>New>Project ( Файл > Создать > Проект). В диалоговом окне Создание проекта найдите и выберите Веб-задание Azure ( .NET Framework) для C#.

  2. Следуйте приведенным выше указаниям, чтобы сделать проект консольного приложения независимым проектом веб-задания.

  1. Щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Добавить>Новый проект веб-задания Azure.

    Запись меню

    Откроется диалоговое окно Добавление веб-задания Azure .

  2. Заполните диалоговое окно Добавление веб-задания Azure и нажмите кнопку ОК.

Файл webjob-publish-settings.json

При настройке консольного приложения для развертывания веб-заданий Visual Studio устанавливает пакет NuGet Microsoft.Web.WebJobs.Publish и сохраняет сведения о планировании в файле webjob-publish-settings.json в папке Свойства проекта веб-заданий. Вот пример этого файла:

{
  "$schema": "http://schemastore.org/schemas/json/webjob-publish-settings.json",
  "webJobName": "WebJob1",
  "startTime": "null",
  "endTime": "null",
  "jobRecurrenceFrequency": "null",
  "interval": null,
  "runMode": "Continuous"
}

Вы можете изменить этот файл напрямую, и Visual Studio предоставит IntelliSense. Схема файла сохранена на сайте https://schemastore.org, и ее можно просмотреть здесь.

Файл webjobs-list.json

При связывании проекта с поддержкой веб-заданий с веб-проектом Visual Studio сохраняет имя проекта веб-заданий в файле webjobs-list.json в папке веб-проекта Properties. Список может содержать несколько проектов веб-заданий, как показано в следующем примере:

{
  "$schema": "http://schemastore.org/schemas/json/webjobs-list.json",
  "WebJobs": [
    {
      "filePath": "../ConsoleApplication1/ConsoleApplication1.csproj"
    },
    {
      "filePath": "../WebJob1/WebJob1.csproj"
    }
  ]
}

Этот файл можно изменить непосредственно в Visual Studio с помощью IntelliSense. Схема файла хранится по адресу https://schemastore.org.

Развертывание проекта веб-заданий

Проект веб-задания, связанный с веб-проектом, развертывается автоматически с веб-проектом. Дополнительные сведения о развертывании веб-проекта см. в разделе Инструкции>Развертывание приложения в левой области навигации.

Чтобы развернуть проект веб-задания, щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Опубликовать как веб-задание Azure.

Опубликовать как веб-задание Azure

Для независимого веб-задания отобразится тот же мастер веб-публикации , который использовался для веб-проектов, но некоторые параметры будут недоступны для изменения.

Диалоговое окно "Добавление веб-задания Azure"

В диалогом окне Добавление веб-задания Azure можно указать имя веб-задания и настроить режим его выполнения.

Диалоговое окно

Поля в этом диалоговом окне соответствуют полям в диалоговом окне Добавление веб-задания на портале Microsoft Azure. Дополнительные сведения см. в статье Выполнение фоновых задач с помощью веб-заданий в Службе приложений Azure.

Сведения о развертывании WebJob:

  • Дополнительные сведения о развертывании из командной строки см. в разделе Включение предоставления веб-заданий Azure из командной строки или постоянно.

  • Если после развертывания веб-задания принимается решение об изменении типа веб-задания и его повторного развертывания, нужно удалить файл webjobs-publish-settings.json. Это приводит к тому, что Visual Studio повторно отображает параметры публикации, поэтому вы можете изменить тип веб-задания.

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

Типы веб-заданий

Тип веб-задания может быть активируемым или непрерывным:

  • Активируемое (по умолчанию). активируемое веб-задание запускается на основе события привязки по расписанию или при активации вручную (по запросу). Оно выполняется на одном экземпляре, на котором выполняется веб-приложение.

  • Непрерывное. Непрерывное веб-задание запускается сразу после создания веб-задания. Оно выполняется на всех масштабируемых экземплярах веб-приложения по умолчанию, но может быть настроено для запуска в качестве одного экземпляра с помощью settings.job.

Примечание

Время ожидания веб-приложения может истечь через 20 минут бездействия, и только запросы к реальному веб-приложению могут сбросить таймер. Таймер не будет сброшен при просмотре конфигурации приложения на портале Azure или выполнении запросов к сайту расширенных средств (https://<app_name>.scm.azurewebsites.net). Если веб-приложение, в котором размещено ваше задание, настроено для выполнения непрерывных или запланированных заданий либо использования триггеров на основе событий, установите параметр Всегда включено в Azure на странице Конфигурация веб-приложения. Этот параметр позволяет гарантировать, что такие типы веб-заданий будут надежно выполняться. Эта функция доступна только в ценовых категориях "Базовый", "Стандартный" и "Премиум".

Планирование активируемого веб-задания

При публикации консольного приложения в Azure Visual Studio задает тип веб-задания, который активируется по умолчанию, и добавляет новый файл settings.job в проект. Для активируемых типов веб-заданий этот файл можно использовать для задания расписания выполнения веб-задания.

Используйте файл settings.job, чтобы задать расписание выполнения веб-задания. В следующем примере оно выполняется раз в час с 9:00 до 17:00:

{
    "schedule": "0 0 9-17 * * *"
}

Этот файл находится в корне папки веб-заданий со сценарием веб-заданий, например wwwroot\app_data\jobs\triggered\{job name} или wwwroot\app_data\jobs\continuous\{job name}. При развертывании веб-задания из Visual Studio для свойств файла settings.job установите значение Копировать, если новее.

Если вы создаете веб-задание на портале Microsoft Azure, файл settings.job создается автоматически.

Выражения CRON

Веб-задания используют те же выражения CRON для планирования, что и триггер таймера в Функциях Azure. Дополнительные сведения о триггере таймера см. в статье Триггеры таймера для службы "Функции Azure".

Примечание

Часовой пояс по умолчанию, используемый в выражениях CRON, — время в формате UTC. Если нужно использовать другой часовой пояс в выражении CRON, создайте для приложения-функции параметр приложения с именем WEBSITE_TIME_ZONE. См. сведения о часовых поясах NCRONTAB.

Справочник по settings.job

Веб-задания поддерживают следующие настройки:

Параметр Тип Описание
is_in_place Все Разрешает выполнение веб-задания без предварительного копирования во временную папку. Дополнительные сведения см. в разделе Рабочий каталог веб-задания.
is_singleton С задержкой Запускает веб-задание только в одном экземпляре при масштабировании. Дополнительные сведения см. в разделе Задание непрерывного задания как отдельное.
schedule Активируемые Запуск веб-задания по расписанию на основе CRON. Дополнительные сведения см. в разделе Выражения NCRONTAB.
stopping_wait_time Все Позволяет управлять поведением при завершении работы. Дополнительные сведения см. в статье о корректном завершении работы.

Непрерывное выполнение

При включении Always on в Azure можно использовать Visual Studio, чтобы изменить веб-задание для непрерывного запуска:

  1. Опубликуйте проект в Azure, если вы еще этого не сделали.

  2. Щелкните правой кнопкой мыши проект в обозревателе решений и выберите пункт Опубликовать.

  3. В разделе Параметры выберите Показать все параметры.

  4. В диалоговом окне Параметры профиля выберите значение Непрерывное для параметра Тип веб-задания, затем нажмите кнопку Сохранить.

    Диалоговое окно

  5. Выберите Опубликовать на вкладке Публикация, чтобы повторно опубликовать веб-задание с обновленными параметрами.

Дальнейшие действия