Почему не работает пример .Net Core / Azure Web Job? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь создать веб-задание, запускаемое по ручному триггеру (используя .Net Core 2.1 и Azure SDK 3.x). Я просто копирую / вставляю код из примера (ручной запуск), чтобы просто получить рабочую отправную точку. Однако, когда я запускаю образец (локально, а также на моем тестовом сервере в Azure), я получаю эту ошибку:

«CreateQueueMessage» не может быть вызван из Azure WebJobs SDK. Это отсутствуют атрибуты Azure WebJobs SDK? '

Я создал веб-задание Azure (консольное приложение .Net Core) так же, как оно описано в документации, и я использую код ручного триггера (и хоста) из примеров. Это ошибка, или мне нужно что-то еще сделать?

Вот документы: https://docs.microsoft.com/en-us/azure/app-service/webjobs-sdk-how-to#triggers

Вот код, который я использую в своем проекте:

using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Threading.Tasks;

namespace PubSubTrigger
{
    class Program
    {
        [NoAutomaticTrigger]
        public static void CreateQueueMessage(ILogger logger, string value, Queue("outputqueue")] out string message)
        {
            message = value;
            logger.LogInformation("Creating queue message: ", message);
        }
        static async Task Main(string[] args)
        {
            var builder = new HostBuilder();
            builder.ConfigureWebJobs(b =>
            {
                b.AddAzureStorageCoreServices();
                b.AddAzureStorage();
            });
            var host = builder.Build();
            using (host)
            {
                var jobHost = host.Services.GetService(typeof(IJobHost)) as JobHost;
                var inputs = new Dictionary<string, object>
                {
                    { "value", "Hello world!" }
                };

                await host.StartAsync();
                await jobHost.CallAsync("CreateQueueMessage", inputs);
                await host.StopAsync();
            }
        }
    }
}

В качестве дополнительного примечания я обнаружил похожую проблему, размещенную на SO: Функции Azure - невозможно вызвать из SDK Azure WebJobs

Однако изменение целевой структуры (на .netstandard) не входит ни в одну из документов Microsoft. И мне показалось бы странным, что документы поручили мне специально создать приложение для веб-заданий Azure на консоли .net, но позже сменить его на .netstandard. И, просто ради удовольствия, я попробовал это решение, но оно выдало совершенно другую ошибку:

Целевой процесс завершился, не вызвав событие CoreCLR. Убедитесь, что целевой процесс настроен на использование .NET Core. это можно ожидать, если целевой процесс не запущен в .NET Core.

Так что я думаю, что этот другой пост - другая проблема.

1 Ответ

1 голос
/ 17 июня 2019

Просто измените class Program на public class Program, тогда вы будете работать хорошо.

Весь код выглядит следующим образом:

public class Program
{
    [NoAutomaticTrigger]
    public static void CreateQueueMessage(ILogger logger, string value, [Queue("myqueue")] out string message)
    {
        ...
    }
    public static void Main(string[] args)
    {
        ...
        ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...