具有Http触发函数的连续Azure WebJob

时间:2017-03-15 18:05:28

标签: c# azure azure-webjobs

我目前有一个azure 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){ }

我可以在webjob下的Kudu仪表板中看到这些功能,但我不确定如何使用MS文档(here)中列出的http请求触发函数:

http://<yourapp>.azurewebsites.net/api/<funcname> 

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

谢谢, 莱恩

2 个答案:

答案 0 :(得分:3)

我们可以使用Kudu WebJob API开始或停止连续工作

  

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

我们可以从Azure WebApp publishSetting文件中获取用户和密码信息。我们可以从门户网站下载文件

enter image description here

使用fiddler

测试Rest API

enter image description here

注意:如何创建Azure功能请参阅document

<强>更新

  

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

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

我的工作是我们可以使用Webjob QueueTrigger。根据队列消息信息触发sepcific功能。 我们可以创建WebJob with QueueTrigger

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

1.创建Azure存储队列以获取触发器

enter image description here

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;
    }

3.使用Azure Storage Queue REST API创建队列消息。

4.从控制台检查结果。

enter image description here

答案 1 :(得分:0)

您正在查看Azure功能的文档,但看起来您正在使用WebJobs(与Azure功能不同)。

我建议使用Azure功能,在这种情况下,您的方案变得更加直接。