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


Руководство. Начало работы с пакетом SDK веб-заданий Azure для фоновой обработки на основе событий

Начните работу с Azure WebJobs SDK для Azure App Service, чтобы ваши веб-приложения могли выполнять фоновые задания, запланированные задачи и реагировать на события.

Используйте Visual Studio 2022, чтобы создать консольное приложение .NET 8, использующее пакет SDK веб-заданий для реагирования на сообщения очереди Azure Storage, локально запустить проект и, наконец, развернуть его в Azure.

В этом учебном пособии вы научитесь, как:

  • Создание консольного приложения
  • Добавление функции
  • Локальное тестирование.
  • Развертывание в Azure
  • Включить ведение журнала в Application Insights
  • Добавление привязок ввода-вывода.

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

Создание консольного приложения

В этом разделе описано, как создать проект в Visual Studio 2022 г. Затем вы добавите средства для разработки с Azure, публикации кода, а также функции, которые прослушивают триггеры и вызывают другие функции. Наконец, вы настроите ведение журнала в консоли, что приведет к отключению устаревшего средства мониторинга и включит провайдера консоли с фильтрацией по умолчанию.

Примечание.

Процедуры, описанные в этой статье, проверяются для создания консольного приложения C#, работающего на .NET 8.0.

Создание проекта

  1. В Visual Studio выберите File>New>Project.

  2. В окне Создание проекта выберите Консольное приложение (C#) и нажмите кнопку Далее.

  3. В окне Настроить новый проект введите имя проекта WebJobsSDKSample и нажмите кнопку Далее.

  4. Выберите Целевую платформу и нажмите Создать. Это руководство проверено с помощью .NET 6.0.

Установите пакеты NuGet для WebJobs

Установите последнюю версию пакета NuGet для веб-заданий. Этот пакет включает Microsoft.Azure.WebJobs (SDK для веб-заданий), который позволяет публиковать ваш код функции в веб-заданиях Azure App Service.

  1. Получите последнюю стабильную версию 4.x пакета NuGet Microsoft.Azure.WebJobs.Extensions.

  2. В Visual Studio перейдите к Tools>NuGet Package Manager.

  3. Выберите консоль Package Manager. Вы увидите список командлетов NuGet, ссылку на документацию и точку входа PM>.

  4. В следующей команде замените <4_X_VERSION> номером текущей версии, полученной на шаге 1.

    Install-Package Microsoft.Azure.WebJobs.Extensions -version <4_X_VERSION>
    

    Примечание.

    Пример кода в этой статье работает с пакетами версии 4.x. Убедитесь, что вы используете версию 4.x, так как при использовании пакетов версии 5.x возникают ошибки сборки.

  5. В консоли Package Manager выполните команду. Появится список расширений, которые будут установлены автоматически.

Создать хост

Хост является контейнером среды выполнения для функций, который прослушивает сигналы от триггеров и вызывает функции. Ниже описано, как создать узел, реализующий IHost, который является универсальным узлом в ASP.NET Core.

  1. Выберите вкладку Program.cs, удалите существующее содержимое и добавьте следующие инструкции using:

    using System.Threading.Tasks;
    using Microsoft.Extensions.Hosting;
    
  2. Также на вкладке Program.cs добавьте следующий код:

    namespace WebJobsSDKSample
    {
        class Program
        {
            static async Task Main()
            {
                var builder = new HostBuilder();
                builder.ConfigureWebJobs(b =>
                {
                    b.AddAzureStorageCoreServices();
                });
                var host = builder.Build();
                using (host)
                {
                    await host.RunAsync();
                }
            }
        }
    }
    

В ASP.NET Core конфигурации узлов задаются путем вызова методов в экземпляре HostBuilder. Для получения дополнительной информации см. .NET Generic Host. Метод расширения ConfigureWebJobs инициализирует узел WebJobs. В ConfigureWebJobs инициализируйте определенные расширения привязок, например расширение привязки к службе хранилища, и задайте свойства этих расширений.

Включение журналирования консоли

Настройте ведение журнала консоли, использующее платформу ведения журнала ASP.NET Core. Эта платформа, Microsoft.Extensions.Logging, включает в себя API, который работает с различными встроенными и сторонними поставщиками ведения журнала.

  1. Получите последнюю стабильную версию пакета NuGet Microsoft.Extensions.Logging.Console, которая включает в себя Microsoft.Extensions.Logging.

  2. В следующей команде замените <9_X_VERSION> номером текущей версии, полученной на шаге 1. Каждый тип пакета NuGet имеет уникальный номер версии.

    Install-Package Microsoft.Extensions.Logging.Console -version <9_X_VERSION>
    
  3. В консоли Package Manager введите текущий номер версии и выполните команду. Появится список расширений, которые будут установлены автоматически.

  4. На вкладке Program.cs добавьте следующую инструкцию using:

    using Microsoft.Extensions.Logging;
    
  5. На той же вкладке Program.cs добавьте метод ConfigureLogging в HostBuilder перед командой Build. Метод AddConsole добавляет в конфигурацию ведение журнала консоли.

    builder.ConfigureLogging((context, b) =>
    {
         b.SetMinimumLevel(LogLevel.Error);
         b.AddFilter("Function", LogLevel.Information);
         b.AddFilter("Host", LogLevel.Debug);
         b.AddConsole();
    });
    

    Это добавляет журналирование, которое фиксирует вывод журнала для выполнения функций на уровне Information, хоста на уровне Debug и всех остальных компонентов на уровне error. Метод Main теперь выглядит следующим образом:

    static async Task Main()
    {
        var builder = new HostBuilder();
        builder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices();
        });
        builder.ConfigureLogging((context, b) =>
        {
            b.SetMinimumLevel(LogLevel.Error);
            b.AddFilter("Function", LogLevel.Information);
            b.AddFilter("Host", LogLevel.Debug);
            b.AddConsole();
        });
        var host = builder.Build();
        using (host)
        {
            await host.RunAsync();
        }
    }
    

    Он также приводит к следующим изменениям.

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

Теперь можно добавить функцию, которая активируется сообщениями, поступающими в очередь Azure Storage.

Добавление функции

Функция — это единица кода, которая выполняется по расписанию, активируется событиями или выполняется по запросу. Триггер прослушивает событие службы. В контексте пакета SDK для веб-заданий триггерный режим не относится к режиму развертывания. Управляемые событиями или запланированные веб-задания, созданные с помощью пакета SDK, всегда должны развертываться как непрерывные веб-задания в режиме Always on.

В этом разделе вы создадите функцию, активированную сообщениями в очереди Azure Storage. Сначала необходимо добавить расширение привязки для подключения к Azure Storage.

Установите расширение привязки хранилища

Начиная с версии 3 пакета SDK для веб-заданий для подключения к службам Azure Storage необходимо установить отдельный пакет расширения привязки хранилища.

Примечание.

Начиная с версии 5.x, Microsoft.Azure.WebJobs.Extensions.Storage разделен по службам хранения и метод расширения был перенесен по типу службы. Для этой версии также требуется обновить версию сборки Microsoft.Azure.WebJobs.Host.Storage, используемой пакетом SDK.

  1. Получите последнюю стабильную версию Microsoft. Azure. WebJobs.Extensions.Storage пакет NuGet версии 5.x.

  2. В следующей команде замените <5_X_VERSION> номером текущей версии, полученной на шаге 1. Каждый тип пакета NuGet имеет уникальный номер версии.

    Install-Package Microsoft.Azure.WebJobs.Extensions.Storage -Version <5_X_VERSION>
    
  3. В консоли Package Manager выполните команду с текущим номером версии в точке входа PM>.

  4. Также выполните эту команду, чтобы обновить пакет Microsoft.Azure.WebJobs.Host.Storage до версии 4.1.0:

    Install-Package Microsoft.Azure.WebJobs.Host.Storage -Version 4.1.0
    
  5. В Program.cs, в методе расширения ConfigureWebJobs, добавьте метод AddAzureStorageQueues в экземпляр HostBuilder (перед командой Build) для инициализации расширения хранилища. На этом этапе метод ConfigureWebJobs выглядит следующим образом:

    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorageQueues();
    });
    
  6. Добавьте приведенный ниже код в метод Main после создания экземпляра builder:

    builder.UseEnvironment(EnvironmentName.Development);
    

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

    Теперь метод Main должен выглядеть следующим образом:

    static async Task Main()
    {
        var builder = new HostBuilder();
        builder.UseEnvironment(EnvironmentName.Development);
        builder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices();
            b.AddAzureStorageQueues();
        });
        builder.ConfigureLogging((context, b) =>
        {
            b.SetMinimumLevel(LogLevel.Error);
            b.AddFilter("Function", LogLevel.Information);
            b.AddFilter("Host", LogLevel.Debug);
            b.AddConsole();
        });
        var host = builder.Build();
        using (host)
        {
            await host.RunAsync();
        }
    }
    

Создание функции, активируемой очередью

Атрибут QueueTrigger сообщает среде выполнения вызывать эту функцию, когда новое сообщение записывается в очередь Azure Storage с именем queue. Содержимое сообщения в очереди передается коду метода в параметре message. Тело метода — это место, где обрабатываются данные триггера. В этом примере код просто записывает сообщение в журнал.

  1. В обозревателе решений щелкните правой кнопкой мыши на проекте, выберите Добавить>Новый элемент, а затем выберите Класс.

  2. Щелкните правой кнопкой мыши новый файл класса C# Functions.cs и выберите Добавить.

  3. В файле Functions.cs замените созданный шаблон следующим кодом:

    using Microsoft.Azure.WebJobs;
    using Microsoft.Extensions.Logging;
    
    namespace WebJobsSDKSample
    {
        public static class Functions
        {
            public static void ProcessQueueMessage([QueueTrigger("queue")] string message, ILogger logger)
            {
                logger.LogInformation(message);
            }
        }
    }
    

    Класс Functions нужно пометить как public static, чтобы метод был доступен для среды выполнения. В приведенном выше примере кода при добавлении сообщения в очередь queue функция выполняется и строка message записывается в журналы. Отслеживаемая очередь находится в учетной записи Azure Storage по умолчанию, которую вы создаете следующим образом.

Параметр message не должен быть строкой. Также можно выполнить привязку к объекту JSON, массиву байтов или CloudQueueMessage. См. "Использование триггера очереди". Каждый тип привязки (например, очереди, BLOB-объекты или таблицы) обладает своим набором типов параметров привязки.

Создание учетной записи хранения Azure

Эмулятор Azure Storage, работающий локально, не имеет всех функций, необходимых пакету SDK для веб-заданий. Вы создадите учетную запись хранения в Azure и настроите проект для его использования.

Сведения о создании учетной записи хранения общего назначения версии 2 см. в статье Создание учетной записи Azure Storage.

Найдите и скопируйте строку подключения

Для настройки хранилища требуется connection string. Сохраните эту строку подключения для следующих шагов.

  1. На портале Azure перейдите к учетной записи хранения и выберите Settings.

  2. В разделе Параметры выберите Ключи доступа.

  3. В разделе Строка подключения для записи key1 щелкните значок Копировать в буфер обмена.

    key

Настройка хранилища для локального запуска

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

  1. Щелкните проект правой кнопкой мыши, выберите Добавить>Новый элемент…, выберите Файл конфигурации JSON JavaScript, присвойте новому файлу имя appsettings.json и щелкните Добавить.

  2. В новом файле добавьте поле AzureWebJobsStorage, как показано в следующем примере:

    {
        "AzureWebJobsStorage": "{storage connection string}"
    }
    
  3. Замените {строка подключения к хранилищу} строкой подключения, которую вы скопировали ранее.

  4. Выберите файл appsettings.json в Solution Explorer и в окне Properties задайте действие Копировать в выходной каталог как Копировать, если более новое.

Так как этот файл содержит секрет connection string, файл не следует хранить в удаленном репозитории кода. После публикации проекта в Azure вы можете добавить в Azure App Service тот же параметр приложения connection string.

Локальное тестирование.

Выполните сборку и запустите проект локально. Создайте очередь сообщений для активации функции.

  1. На портале Azure перейдите к учетной записи хранения и выберите вкладку Queues (1). Щелкните + Очередь (2) и введите queue в качестве имени очереди (3). Нажмите кнопку ОК (4).

    Это изображение показывает, как создать новую очередь хранилища Azure.

  2. Щелкните новую очередь и выберите Добавить сообщение.

  3. В диалоговом окне Add Message введите Hello World! в качестве текста и выберите OK. В очереди есть новое сообщение.

    Создать очередь

  4. Нажмите клавиши CTRL+F5, чтобы запустить проект.

    В консоли показано, что среда выполнения обнаружила вашу функцию. Так как вы использовали атрибут QueueTrigger в функции ProcessQueueMessage, исполняющая среда WebJobs ждет сообщений в очередь queue. При обнаружении нового сообщения в этой очереди среда выполнения вызывает функцию, передавая ей значение строки сообщения.

  5. Вернитесь к окну Очередь и обновите страницу. Сообщение исчезнет, так как оно уже обработано функцией, выполняемой локально.

  6. Закройте окно консоли или введите CTRL+C.

Теперь пришло время опубликовать проект пакета SDK веб-заданий в Azure.

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

В процессе развертывания создается экземпляр службы приложений, в котором будут выполняться ваши функции. При публикации консольного приложения .NET в службе приложений в Azure он автоматически запускается в качестве веб-задания. Чтобы узнать больше о публикации, см. статью Разработка и развертывание WebJobs с помощью Visual Studio.

Создание ресурсов Azure

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

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

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

  4. Над Экземплярами службы App нажмите кнопку "плюс" (+), чтобы создать новый Azure WebJob.

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

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

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

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

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

Включить Always On

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

  1. На странице Publish выберите три точки над Hosting, чтобы отобразить действия в секции профиля хостинга и выбрать Открыть на портале Azure.

  2. В окне Параметры выберите Конфигурация>Общие настройки, задайте для параметра Always on значение Включено, после чего щелкните Сохранить и Продолжить, чтобы перезапустить сайт.

Публикация проекта

С помощью веб-приложения, созданного в Azure, пришло время опубликовать проект WebJobs.

  1. На странице Публикация в разделе Размещение нажмите кнопку "Изменить" и измените Тип веб-задания на Continuous, затем нажмите кнопку Сохранить. Это гарантирует, что веб-задание будет выполняться при добавлении сообщений в очередь. Триггерные веб-задания обычно используются только для ручных веб-хуков.

    Измените тип веб-задания из окна публикации VS 2022.

  2. Нажмите кнопку Опубликовать в правом верхнем углу страницы Публикация. Когда операция завершится, веб-задание выполняется в Azure.

Создание параметра приложения для подключения к хранилищу

Необходимо создать в Azure ту же строку подключения хранилища, что и в локальном файле конфигурации appsettings.json. Это позволяет более безопасно хранить строку подключения и

  1. На странице профиля Publish выберите три точки над Hosting, чтобы отобразить действия раздела профиля Hosting и выберите пункт Управление настройками Azure App Service.

  2. В разделе Параметры приложения выберите Добавить параметр.

  3. В окне Имя нового параметра приложения введите AzureWebJobsStorage и нажмите кнопку ОК.

  4. В Remote вставьте connection string из локального параметра и выберите OK.

Теперь строка подключения устанавливается в приложении на платформе Azure.

Активация функции в Azure

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

  2. На странице Queue в Visual Studio добавьте сообщение в очередь, как и раньше.

  3. Обновите страницу Queue, а новое сообщение исчезнет, так как оно обработано функцией, запущенной в Azure.

Включить ведение журнала в Application Insights

Когда веб-задание выполняется в Azure, вы не можете отслеживать выполнение функции, просматривая выходные данные консоли. Чтобы иметь возможность отслеживать веб-задание, при публикации проекта следует создать связанный экземпляр Application Insights.

Создайте экземпляр Application Insights

  1. На странице профиля Publish Выберите три точки над Hosting, чтобы отобразить действия раздела профиля Hosting profile actions и выбрать Open на портале Azure.

  2. В веб-приложении в разделе "Мониторинг" выберите Application Insights и выберите "Включить Application Insights".

  3. Проверьте созданное имя ресурса для экземпляра и расположения, а затем нажмите кнопку "Применить " и " Да".

  4. В разделе "Параметры" выберите переменные среды и убедитесь, что создан новый APPINSIGHTS_INSTRUMENTATIONKEY объект. Этот ключ используется для подключения экземпляра веб-задания к Application Insights.

Чтобы воспользоваться преимуществами ведения журнала Application Insights, нужно также обновить код ведения журнала.

Установите расширение Application Insights

  1. Получите последнюю стабильную версию Microsoft. Azure. WebJobs.Logging.ApplicationInsights пакет NuGet версии 3.x.

  2. В следующей команде замените <3_X_VERSION> номером текущей версии, полученной на шаге 1. Каждый тип пакета NuGet имеет уникальный номер версии.

    Install-Package Microsoft.Azure.WebJobs.Logging.ApplicationInsights -Version <3_X_VERSION>
    
  3. В консоли Package Manager выполните команду с текущим номером версии в точке входа PM>.

Инициализация провайдера логирования Application Insights

Откройте файл Program.cs и добавьте приведенный ниже инициализатор в ConfigureLogging после вызова AddConsole:

// If the key exists in settings, use it to enable Application Insights.
string instrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
if (!string.IsNullOrEmpty(instrumentationKey))
{
    b.AddApplicationInsightsWebJobs(o => o.InstrumentationKey = instrumentationKey);
}

Теперь код метода Main должен выглядеть следующим образом:

static async Task Main()
{
    var builder = new HostBuilder();
    //builder.UseEnvironment(EnvironmentName.Development);
    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorageQueues();
    });
    builder.ConfigureLogging((context, b) =>
    {
        b.SetMinimumLevel(LogLevel.Error);
        b.AddFilter("Function", LogLevel.Information);
        b.AddFilter("Host", LogLevel.Debug);
        b.AddConsole();

        // If the key exists in settings, use it to enable Application Insights.
        string? instrumentationKey = context.Configuration["APPINSIGHTS_INSTRUMENTATIONKEY"];
        if (!string.IsNullOrEmpty(instrumentationKey))
        {
            b.AddApplicationInsightsWebJobs(o => o.InstrumentationKey = instrumentationKey);
        }
    });
    var host = builder.Build();
    using (host)
    {
        await host.RunAsync();
    }
}

Это действие позволит инициализировать поставщик журнала Application Insights с фильтрацией по умолчанию. При локальном выполнении вся информация и журналы более высокого уровня выводятся как в консоль, так и в Application Insights. При локальном запуске ведение журнала Application Insights поддерживается только после добавления APPINSIGHTS_INSTRUMENTATIONKEY в файл appsetting.json в проекте.

Повторная публикация проекта и активация функции

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

  2. Как и раньше, используйте портал Azure для создания сообщения очереди, как вы сделали ранее, за исключением ввода Hello App Insights! в качестве текста сообщения.

  3. На странице профиля Publish выберите три точки над Hosting, чтобы отобразить действия в разделе профиля Hosting и выбрать Открыть в портале Azure.

  4. В веб-приложении в разделе Настройки>Монитор выберите Application Insights и нажмите Просмотреть данные Application Insights.

  5. Выберите Поиск, а затем выберите See all data in the last 24 hours (Просмотреть все данные за последние 24 часа).

    Выбор поиска

  6. Если вы не видите сообщение Hello App Insights!, выберите периодическое обновление в течение нескольких минут. Журналы не появляются немедленно, поскольку клиенту Application Insights требуется время, чтобы сбросить обрабатываемые журналы.

    Журналы в Application Insights

Добавление привязок ввода-вывода.

Привязки упрощают код для чтения и записи данных. Привязка входных данных упрощает код чтения данных. Привязки выходных данных упрощают код записи данных.

Добавить привязки

Привязка входных данных упрощает код чтения данных. В этом примере сообщение очереди — это имя большого двоичного объекта, который будет использоваться для поиска и чтения большого двоичного объекта в Azure Storage. Позже вы будете использовать выходные привязки для записи копии файла в тот же контейнер.

  1. В Functions.cs добавьте using:

    using System.IO;
    
  2. Замените метод ProcessQueueMessage следующим кодом:

    public static void ProcessQueueMessage(
        [QueueTrigger("queue")] string message,
        [Blob("container/{queueTrigger}", FileAccess.Read)] Stream myBlob,
        [Blob("container/copy-{queueTrigger}", FileAccess.Write)] Stream outputBlob,
        ILogger logger)
    {
        logger.LogInformation($"Blob name:{message} \n Size: {myBlob.Length} bytes");
        myBlob.CopyTo(outputBlob);
    }
    

    В этом коде queueTrigger — это выражение привязки, что означает, что его значение определяется во время выполнения. Во время выполнения оно содержит сообщение в очереди.

    Этот код использует выходные привязки для создания копии файла, определенного сообщением очереди. Копия файла имеет префикс copy-.

  3. На вкладке Program.cs в метод расширения ConfigureWebJobs добавьте метод AddAzureStorageBlobs для экземпляра HostBuilder (перед командой Build), чтобы инициализировать расширение службы хранилища. На этом этапе метод ConfigureWebJobs выглядит следующим образом:

    builder.ConfigureWebJobs(b =>
    {
        b.AddAzureStorageCoreServices();
        b.AddAzureStorageQueues();
        b.AddAzureStorageBlobs();
    });
    
  4. Создайте контейнер для BLOB-объектов в вашей учетной записи хранения.

    a. На портале Azure перейдите на вкладку Containers ниже Data storage и выберите + Контейнер

    b. В диалоговом окне Создать контейнер для имени контейнера введите container, а затем нажмите кнопку Создать.

  5. Отправьте файл Program.cs в контейнер BLOB. (Этот файл используется здесь для примера; вы можете передать любой текстовый файл и создавать сообщение в очереди с его именем.)

    a. Выберите созданный контейнер.

    b. Нажмите кнопку Отправить.

    Кнопка загрузки BLOB-объекта

    c. Найдите и выберите файл Program.cs, а затем нажмите кнопку OK.

Повторная публикация проекта

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

  2. В диалоговом окне Публикация убедитесь, что выбран текущий профиль, а затем щелкните Опубликовать. Подробные результаты публикации выводятся в окно Вывод.

  3. Создайте сообщение в ранее созданной очереди с Program.cs в качестве текста сообщения.

    Сообщение очереди Program.cs

  4. Копия файла copy-Program.cs появится в BLOB-контейнере.

Следующие шаги

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