在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);
}
}
}
首先,我不知道您想将消息写入队列还是从队列中读取,您正在尝试从队列中获取消息,但是您为消息分配了其他值。
然后是关于如何将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);
}
}
}
这是我的测试结果图片。