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

问题描述 投票:0回答:1

在VS中,我创建了一个连续类型的Web作业。我的网络作业SDK是3.0.14。我可以编写一个timerTribber,但是blob / queue的绑定均不可用。我想念什么?下面是代码。我在.NET 4.7.2上。当我编译时,出现错误“错误CS0404:由于属性类'Queue'是通用的,因此无法应用它”

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);
        }
    }
}
azure-webjobs azure-webjobssdk
1个回答
0
投票

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

然后是关于如何将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);
        }
    }
}

这是我的测试结果图片。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.