【问题标题】:Azure WebJobs - No functions found - How do I make a trigger-less job?Azure WebJobs - 未找到函数 - 如何进行无触发器作业?
【发布时间】:2017-01-26 14:26:24
【问题描述】:

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

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

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

没有找到函数。尝试公开工作类和公开方法 静态的。

我错过了什么?

编辑 在维克多的回答之后,我尝试了以下方法,

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 属性?

【问题讨论】:

    标签: c# azure azure-webjobs


    【解决方案1】:

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

    【讨论】:

    • 感谢 Victor 的回答,我尝试了 NoAutomaticTrigger 并得到了 InvalidOperationException,我已经用我拥有的代码更新了我的问题,请你帮忙看看我做错了什么。非常感谢!
    • 啊,你是对的,我刚刚在“类程序”上声明了“公共”,它运行但是它在下面显示了几秒钟的消息,然后控制台窗口就崩溃了。消息:“找到以下函数:WebJob1.Program.ManualTrigger 正在执行:'Program.ManualTrigger',因为这是通过主机 API 以编程方式调用的函数。”
    • 除非你调用host.RunAndBlock();,否则进程将退出。
    • Host.Call 类似于调用一个函数然后继续。 RunAndBlock 将(惊喜!)阻止并保持程序活着
    • 使用 SDK 有一个好处,即使没有自动触发。当主机运行时(又名 RunAndBlock 或 host.Start),您会在 WebJobs 仪表板中看到该功能。这允许您直接从那里调用该函数。将 host.Call 视为一个花哨的 MethodInfo.call,它为您提供仪表板日志记录
    【解决方案2】:

    您可以使用最新的 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/)。

    【讨论】:

      猜你喜欢
      • 2016-04-12
      • 2014-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2019-12-31
      • 1970-01-01
      相关资源
      最近更新 更多