通过 VS 在 WebJob 中编码时缺少 QueueAttribute

QueueAttribute missing while coding in WebJob via VS

我在 VS 中创建了一个连续类型的 Web 作业。我的网络作业 SDK 是 3.0.14。我可以编写一个 timerTribber,但是 blob/queue 的绑定 none 可用。我错过了什么?下面是代码。我在 .NET 4.7.2 上。编译时出现错误 "error CS0404: Cannot apply attribute class 'Queue' because it is generic"

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;

namespace WebJob2
{
    public class Functions
    {
        // This function will get triggered every Min
        public static void ProcessEveryMin([TimerTrigger("0 * * * * *", RunOnStartup = true)] TimerInfo timerTriggerInfo, 
            [Queue("queue1")] string message, TextWriter log)
        {
            message = "NextRun on " + timerTriggerInfo.Schedule.GetNextOccurrence(DateTime.Now).ToString();
            log.WriteLine(message);
        }
    }
}

首先,我不知道您想将消息写入队列还是从队列中读取,您正在尝试从队列中获取消息,但是您为消息分配了其他值。

然后是如何将Queue绑定到webjob。下面是我的Program.cs主要方法。如果你想使用队列绑定,你需要 AddAzureStorageCoreServices()AddAzureStorage().

 static void Main(string[] args)
    {
        var builder = new HostBuilder();
        builder.ConfigureWebJobs(b =>
        {
            b.AddAzureStorageCoreServices();
            b.AddTimers();
            b.AddAzureStorage();
        });
        builder.ConfigureLogging((context, b) =>
        {
            b.AddConsole();
        });
        var host = builder.Build();
        using (host)
        {
            host.Run();
        }
    }

下面是我的 Function.cs.

using System;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Extensions.Logging;
using Microsoft.WindowsAzure.Storage.Queue;

namespace ConsoleApp68
{
    public class Functions
    {
        public static async Task ProcessEveryMinAsync([TimerTrigger("0 * * * * *", RunOnStartup = true)] TimerInfo timerTriggerInfo,
            [Queue("myqueue") ] CloudQueue queue, ILogger logger)
        {
            logger.LogInformation("NextRun on " + timerTriggerInfo.Schedule.GetNextOccurrence(DateTime.Now).ToString());
            CloudQueueMessage message= await queue.GetMessageAsync();
            logger.LogInformation(message.AsString);
            await queue.DeleteMessageAsync(message);
            CloudQueueMessage testmessage = new CloudQueueMessage("test message");
            await queue.AddMessageAsync(testmessage);
        }
    }
}

这是我的测试结果图片。