Я пытаюсь создать веб-задание, запускаемое по ручному триггеру (используя .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.
Так что я думаю, что этот другой пост - другая проблема.