Разработка и развертывание веб-заданий с помощью 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 приложения.
Щелкните правой кнопкой мыши проект в обозревателе решений и выберите пункт Опубликовать.
В диалоговом окне Публикация выберите Azure в качестве параметра Целевой объект, а затем нажмите Далее.
Выберите Веб-задания Azure в качестве параметра Указанный целевой объект, а затем нажмите Далее.
Над элементом App Service instances (Экземпляры Службы приложений) нажмите кнопку со знаком плюс ( + ), чтобы открыть окно Create a new Azure WebJob (Создание веб-задания Azure).
В диалоговом окне Служба приложений (Windows) задайте параметры размещения, которые указаны в следующей таблице.
Параметр Рекомендуемое значение Описание имя; Глобально уникальное имя Имя, которое однозначно идентифицирует новое приложение-функцию. Подписка Выберите свою подписку Подписка Azure, которую нужно использовать. Группа ресурсов myResourceGroup Имя группы ресурсов, в которой будет создано приложение-функция. Чтобы создать группу ресурсов, выберите Создать. План размещения План службы приложений План службы приложений указывает расположение, размер и функции фермы веб-серверов, в которой размещается приложение. Вы можете сэкономить средства при размещении нескольких приложений, настроив совместное использование одного плана службы приложений в веб-приложениях. Планы службы приложений определяют регион, размер экземпляра, степень масштабирования и SKU ("Бесплатный", "Общий", "Базовый", "Стандартный" или "Премиум"). Выберите Создать, чтобы создать новый план службы приложений Уровни "Бесплатный" и "Базовый" не поддерживают функцию Always On, чтобы обеспечить непрерывную работу сайта. Выберите Создать, чтобы создать веб-задание и связанные с ним ресурсы в Azure с заданными параметрами, а также развернуть код проекта.
Чтобы вернуться на страницу Публикация, выберите Готово.
Веб-задания как консольные приложения платформы .NET Framework
Если вы используете Visual Studio для развертывания проекта консольного приложения .NET Framework с поддержкой веб-заданий, программа копирует файлы среды выполнения в соответствующую папку в веб-приложении (App_Data/jobs/continuous для непрерывных веб-заданий и App_Data/jobs/triggered для запланированных или выполняемых по требованию веб-заданий).
Visual Studio добавляет следующие элементы в проект с поддержкой веб-заданий:
- Пакет NuGet Microsoft.Web.WebJobs.Publish .
- Файл webjob-publish-settings.json , который содержит параметры развертывания и планировщика.
Вы можете добавить эти элементы в существующий проект приложения консоли или использовать шаблон для создания нового проекта приложения консоли с поддержкой веб-заданий.
Можно развернуть проект как веб-задание или связать его с веб-проектом для автоматического развертывания при каждом развертывании веб-проекта. Чтобы связать проекты, Visual Studio включает имя проекта с поддержкой веб-заданий в файле webjobs-list.json веб-проекта.
Предварительные требования
Установите Visual Studio 2022 с рабочей нагрузкой "Разработка для Azure".
Включение развертывания веб-заданий для существующего проекта консольного приложения
Имеются две возможности.
Включение автоматического развертывания с веб-проектом.
Настройка существующего проекта консольного приложения таким образом, чтобы он автоматически развертывался как веб-задание при развертывании веб-проекта. Используйте этот параметр, если нужно запустить веб-задание в том же веб-приложении, в котором запущено связанное веб-приложение.
Включение развертывания без веб-проекта.
Настройка существующего проекта приложения консоли для развертывания в качестве веб-задания без ссылки на веб-проект. Используйте этот параметр, если нужно запустить веб-задание в веб-приложении самостоятельно, без веб-приложения, запущенного в веб-приложении. Это может потребоваться для масштабирования ресурсов веб-заданий независимо от ресурсов веб-приложений.
Включение автоматического развертывания веб-заданий с помощью веб-проекта
Щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Добавить>Существующий проект как веб-задание Azure.
Откроется диалоговое окно Добавление веб-задания Azure .
В раскрывающемся списке Имя проекта выберите проект консольного приложения для добавления в качестве веб-задания.
Заполните диалоговое окно Добавление веб-задания Azure и щелкните кнопку ОК.
Включение развертывания веб-заданий без веб-проекта
Щелкните правой кнопкой мыши проект консольного приложения в Обозревателе решений и выберите Опубликовать как веб-задание Azure.
Появится диалоговое окно Добавление веб-задания Azure с проектом, выбранным в поле Имя проекта .
Заполните диалоговое окно Добавление веб-задания Azure и щелкните кнопку ОК.
Откроется мастер веб-публикации . Если вы не хотите сразу выполнить публикацию, закройте мастер. Указанные параметры сохраняются до момента развертывания проекта.
Создание нового проекта с поддержкой веб-заданий
Чтобы создать проект с поддержкой веб-заданий, можно использовать шаблон проекта консольного приложения и включить развертывание веб-заданий, как показано в предыдущем разделе. В качестве альтернативы можно использовать шаблон создания проекта с поддержкой веб-заданий:
Использование шаблона создания проекта веб-заданий для отдельного веб-задания
Создайте проект и настройте его для развертывания в качестве веб-задания без ссылки на веб-проект. Используйте этот параметр, если нужно запустить веб-задание в веб-приложении самостоятельно, без веб-приложения, запущенного в веб-приложении. Это может потребоваться для масштабирования ресурсов веб-заданий независимо от ресурсов веб-приложений.
-
Создайте проект, настроенный для автоматического развертывания, как веб-задание при развертывании веб-проекта в том же решении. Используйте этот параметр, если нужно запустить веб-задание в том же веб-приложении, в котором запущено связанное веб-приложение.
Примечание
Шаблон нового проекта веб-задания автоматически устанавливает пакеты NuGet и включает в файл Program.cs код для пакета SDK веб-заданий. Если вы не хотите использовать пакет SDK для веб-заданий, удалите или измените инструкцию host.RunAndBlock
в файле Program.cs.
Использование шаблона создания проекта веб-заданий для отдельного веб-задания
Выберите File>New>Project ( Файл > Создать > Проект). В диалоговом окне Создание проекта найдите и выберите Веб-задание Azure ( .NET Framework) для C#.
Следуйте приведенным выше указаниям, чтобы сделать проект консольного приложения независимым проектом веб-задания.
Использование шаблона создания проекта с поддержкой веб-заданий для веб-задания, связанного с веб-проектом
Щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Добавить>Новый проект веб-задания Azure.
Откроется диалоговое окно Добавление веб-задания Azure .
Заполните диалоговое окно Добавление веб-задания 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 можно указать имя веб-задания и настроить режим его выполнения.
Поля в этом диалоговом окне соответствуют полям в диалоговом окне Добавление веб-задания на портале 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, чтобы изменить веб-задание для непрерывного запуска:
Опубликуйте проект в Azure, если вы еще этого не сделали.
Щелкните правой кнопкой мыши проект в обозревателе решений и выберите пункт Опубликовать.
В разделе Параметры выберите Показать все параметры.
В диалоговом окне Параметры профиля выберите значение Непрерывное для параметра Тип веб-задания, затем нажмите кнопку Сохранить.
Выберите Опубликовать на вкладке Публикация, чтобы повторно опубликовать веб-задание с обновленными параметрами.