具有Http触发功能的连续Azure WebJob

rwd*_*ial 6 c# azure azure-webjobs

我目前有一个天蓝色的webjob,它执行从一个数据库到另一个数据库的每日同步,但还想增加手动触发同步的功能。我在webjob项目中设置了以下功能:

public static void SyncData([TimerTrigger("0 0 5 * * *", RunOnStartup = false)] TimerInfo timerInfo) { }

[NoAutomaticTrigger]
public static Task SyncAll(TraceWriter log){ }
[NoAutomaticTrigger]
public static Task SyncBranches(TraceWriter log){ }
[NoAutomaticTrigger]
public static Task SyncCustomers(TraceWriter log){ }
[NoAutomaticTrigger]
public static Task SyncInventory(TraceWriter log){ }
Run Code Online (Sandbox Code Playgroud)

我可以在webjob下的Kudu仪表板中看到这些功能,但是不确定如何通过MS文档(此处)上列出的http请求触发这些功能:

http://<yourapp>.azurewebsites.net/api/<funcname> 
Run Code Online (Sandbox Code Playgroud)

当我向该端点发出请求时,我会收到404响应-为了通过http请求手动触发这些功能,我需要做什么?

谢谢,瑞安

Tom*_*SFT 6

我们可以使用 Kudu WebJob API来启动或停止连续作业

POST https://{user}:{password}@{sitename}.scm.azurewebsites.net/api/continuouswebjobs/{job name}/start

我们可以从 Azure WebApp 发布设置文件中获取用户和密码信息。我们可以从门户下载文件

在此处输入图片说明

使用 fiddler 测试 Rest API

在此处输入图片说明

注意:如何创建Azure函数请参考文档

更新:

有没有办法可以在该连续工作中触发特定功能?

根据我的经验,我找不到直接在连续作业中触发特定功能的方法或 Rest API。

我的解决方法是我们可以使用 Webjob QueueTrigger。根据队列消息信息触发特定功能。我们可以使用 QueueTrigger创建一个WebJob

以下是我根据您的代码的详细步骤。

1.为触发器创建一个Azure存储队列

在此处输入图片说明

2.创建一个Webjob项目,添加如下代码

 public static void SyncData([QueueTrigger("backup")] string logMessage, TextWriter logger)
    {
        Console.WriteLine($"Start time:{DateTime.Now}");
        switch (logMessage.ToLower())
        {
            case "syncall":
                SyncAll(logger);
                break;
            case "syncbranches":
                SyncBranches(logger);
                break;
            case "synccustomers":
                SyncCustomers(logger);
                break;
            case "syncinventory":
                SyncInventory(logger);
                break;
            default:
                Console.WriteLine("Default case");
                break;
        }
        Console.Write($"Endtime:{DateTime.Now}");

    }
    [NoAutomaticTrigger]
    public static Task SyncAll(TextWriter log)
    {

        Console.WriteLine("SyncAll :"+DateTime.Now);
        return null;
        //await Task.Delay(10);
    }

    [NoAutomaticTrigger]
    public static Task SyncBranches(TextWriter log)
    {
        Console.WriteLine("SyncBranches :" + DateTime.Now);
        return null;
    }

    [NoAutomaticTrigger]
    public static Task SyncCustomers(TextWriter log)
    {
        Console.WriteLine("SyncCustomers :" + DateTime.Now);
        return null;
    }

    [NoAutomaticTrigger]
    public static Task SyncInventory(TextWriter log)
    {
        Console.WriteLine("SyncInventory :" + DateTime.Now);
        return null;
    }
Run Code Online (Sandbox Code Playgroud)

3.使用 Azure存储队列 REST API创建队列消息。

4.从控制台检查结果。

在此处输入图片说明

  • 如果你想在 azure webjob 中触发 sepcific 函数,我的走动是使用队列触发器。我在答案中更新了更多细节。 (2认同)