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

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

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

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

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

С помощью пакета SDK Azure webJobs версии 3.x можно создавать и публиковать веб-задания в виде консольных приложений .NET Core. Пошаговые инструкции по созданию и публикации консольного приложения .NET Core в Azure в качестве WebJob см. в статье Get started with the Azure WebJobs SDK for event-driven background processing.

Замечание

.NET Core Web Apps и /или .NET Core WebJobs не могут быть связаны с веб-проектами. Если необходимо развернуть веб-задание с веб-приложением, создайте веб-задания в качестве консольного приложения .NET Framework.

Развертывание в Azure App Service

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

  1. В Solution Explorer щелкните проект правой кнопкой мыши и выберите Publish.

  2. В диалоговом окне Публикация выберите Azure для Target, а затем нажмите Далее.

  3. Выберите Azure webJobs для целевого объекта Specific и выберите Next.

  4. Выше Экземпляры App Service нажмите кнопку "плюс" (+) для создания нового Azure WebJob.

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

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

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

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

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

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

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

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

Схема, на которой показан пакет NuGet и файл параметров публикации веб-заданий, добавляемый в консольное приложение, чтобы включить развертывание в качестве веб-задания.

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

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

Схема, показывающая, что проект веб-заданий связан с веб-проектом, когда его имя включено в файл webjobs-list.json.

Предпосылки

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

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

У вас есть два варианта:

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

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

  • Обеспечьте развертывание без веб-проекта.

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

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

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

    Screenshot, показывающий, как добавить существующий проект в качестве Azure WebJob.

    Откроется диалоговое окно Add Azure WebJob.

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

    Скриншот, который показывает, как выбрать проект в диалоговом окне

  3. Завершите диалоговое окно Add Azure WebJob и выберите OK.

Возможность развертывания WebJobs без веб-проекта

  1. Щелкните правой кнопкой мыши проект консольного приложения в Solution Explorer и выберите Publish как Azure WebJob.

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

    Откроется диалоговое окно Add Azure WebJob, в поле Имя проекта будет выбран проект.

  2. Завершите диалоговое окно Add Azure WebJob и выберите OK.

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

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

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

  • Используйте шаблон нового проекта WebJobs для создания независимой WebJob

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

  • Используйте шаблон нового проекта WebJobs для WebJob, связанного с веб-проектом

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

Замечание

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

Использование шаблона нового проекта WebJobs для независимого WebJob

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

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

Используйте шаблон нового проекта WebJobs для веб-задания, связанного с веб-проектом.

  1. Щелкните правой кнопкой мыши веб-проект в Solution Explorer и выберите Добавить>New Azure WebJob Project.

    Скриншот, показывающий, как добавить новый проект Azure WebJob.

    Откроется диалоговое окно Add Azure WebJob.

  2. Завершите диалоговое окно Add Azure WebJob и выберите OK.

файл webjob-publish-settings.json

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

{
  "$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. Список может содержать несколько проектов WebJob, как показано в следующем примере:

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

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

Развертывание проекта WebJobs

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

Чтобы развернуть проект WebJobs самостоятельно, щелкните правой кнопкой мыши проект в Solution Explorer и выберите Опубликовать как Azure WebJob.

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

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

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

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

Снимок экрана диалогового окна добавления Azure WebJob.

Некоторые поля в этом диалоговом окне соответствуют полям на Add WebJob на портале Azure. Дополнительные сведения см. в разделе Запустить фоновые задачи с веб-заданиями в Azure App Service.

Информация о развертывании WebJob:

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

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

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

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

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

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

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

Замечание

Время ожидания веб-приложения может истечь через 20 минут бездействия, и только запросы к реальному веб-приложению могут сбросить таймер. Просмотр конфигурации приложения на портале Azure или запросы на сайт расширенных инструментов не сбрасывают таймер. Если вы настроили веб-приложение для хоста вашего задания для непрерывной работы, по расписанию или с использованием триггеров, основанных на событиях, включите параметр Always on на панели настройки Azure Configuration. Параметр Always on помогает убедиться, что эти типы WebJobs выполняются надежно. Эта функция доступна только в ценовых категориях "Базовый", "Стандартный" и "Премиум".

Планирование инициированного веб-задания

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

Используйте файл settings.job для установки расписания выполнения веб-задания. Следующий пример выполняется каждый час с 9 утра до 5 вечера:

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

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

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

Выражения CRON

WebJobs используют те же выражения CRON для планирования, что и триггер таймера в Azure Functions. Дополнительные сведения о поддержке CRON см. в разделе Timer trigger for Azure Functions.

Замечание

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

настройки.идентификатор задания

Веб-задания поддерживают следующие параметры в файле settings.job :

Настройки Тип Описание
is_in_place Все Позволяет веб-заданию выполняться на месте без предварительного копирования во временную папку. Дополнительные сведения см. в рабочем каталоге WebJob.
is_singleton Непрерывный Выполняйте веб-задание только на одном экземпляре при масштабировании. Дополнительные сведения см. в разделе Установка непрерывного задания в качестве одноэлементного.
schedule Активировано Запустите веб-задание по расписанию, основанному на cron. Дополнительные сведения см. в разделе Выражения NCRONTAB.
stopping_wait_time Все Позволяет управлять поведением выключения. Дополнительную информацию см. в разделе Корректное завершение работы.

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

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

  1. Если проект еще не опубликован, опубликовать проект для Azure.

  2. В Solution Explorer щелкните проект правой кнопкой мыши и выберите Publish.

  3. В разделе Настройки выберите Показать все настройки.

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

    Снимок экрана: диалоговое окно

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

Дальнейшие шаги