Поделиться через


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

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

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

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

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

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

Замечание

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

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

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

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

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

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

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

Схема, показывающая, что добавляется в консольное приложение для развертывания в качестве веб-задания

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

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

Диаграмма, показывающая связь проекта WebJob с веб-проектом

Предпосылки

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

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

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

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

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

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

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

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

    Существующий проект как Azure WebJob

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

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

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

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

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

    Публикация как Azure WebJob

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

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

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

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

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

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

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

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

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

Замечание

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

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

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

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

    Новый пункт меню проекта Azure WebJob

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

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

webjob-publish-settings.json файл

При настройке консольного приложения для развертывания WebJobs Visual Studio устанавливает пакет NuGet Microsoft.Web.WebJobs.Publish и сохраняет сведения о планировании в файле webjob-publish-settings.json в папке "Свойства " проекта 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 файл

При связывании проекта с поддержкой WebJobs с веб-проектом Visual Studio сохраняет имя проекта WebJobs в файле webjobs-list.json в папке "Свойства " веб-проекта. Список может содержать несколько проектов 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, связанный с веб-проектом, автоматически развертывается вместе с веб-проектом. Сведения о развертывании веб-проекта см. в разделе Практические руководства> поразвертыванию приложения на панели навигации слева.

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

Публикация как Azure WebJob

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

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

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

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

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

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

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

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

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

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

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

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

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

Замечание

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

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

При публикации консольного приложения в Azure Visual Studio по умолчанию задает тип WebJob как 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. Дополнительные сведения о поддержке CRON см. в статье Триггер таймера для Функций Azure.

Замечание

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

settings.ссылка на работу

WebJobs поддерживает следующие настройки:

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

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

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

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

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

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

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

    Диалоговое окно «Параметры публикации» для веб-задания

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

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