首页 文章

Azure WebJobs - 未找到任何功能 - 如何进行无触发工作?

提问于
浏览
14

我运行了一个示例,其中用户将图像上传到blob存储并将记录插入到队列中,然后作业从队列中检索该记录作为信号来执行调整上传图像的大小 . 基本上在代码中,作业使用公共静态方法上的 QueueTrigger 属性来完成所有这些操作 .

现在我需要一个工作,就像每小时将一条记录插入数据库表,它没有任何类型的触发器,它只是自己运行 . 我该怎么做呢?

我尝试了一个静态方法,并在其中我插入到db,工作确实开始,但我收到一条消息说:

未找到任何功能 . 尝试将作业类公开,方法公共静态 .

我错过了什么?

Edit 在Victor的回答之后,我尝试了以下方法,

static void Main()
{
    JobHost host = new JobHost();
    host.Call(typeof(Program).GetMethod("ManualTrigger"));
}

[NoAutomaticTrigger]
public static void ManualTrigger()
{
    // insert records to db
}

但是这次我得到 InvalidOperationException

无法从Azure WebJobs SDK调用'Void ManualTrigger()' . 是否缺少Azure WebJobs SDK属性?

2 回答

  • 15

    如果不使用WebJobs SDK(QueueTrigger,Blob,Table等)中的任何输入/输出属性,则必须使用 NoAutomaticTrigger 属性来装饰作业,以便SDK识别 .

  • 3

    您可以使用最新的WebJobs SDK,它支持基于相同的CRON表达式格式按计划触发作业功能 . 您可以使用它来每小时安排工作:

    [Disable("DisableMyTimerJob")]
    public static void TimerJob([TimerTrigger("00:01:00")] TimerInfo timerInfo, TextWriter log)
    {
        log.WriteLine("Scheduled job fired!");
    }
    

    此外,WebJobs SDK还具有可应用于函数的DisableAttribute,允许您根据应用程序设置启用/禁用功能 . 如果更改Azure管理门户中的应用程序设置,则将重新启动作业(https://azure.microsoft.com/en-us/blog/extensible-triggers-and-binders-with-azure-webjobs-sdk-1-1-0-alpha1/) .

相关问题