2017-03-15 51 views
3

我目前有一个天蓝色的webjob,可以执行从一个数据库到另一个数据库的日常同步,但也希望添加手动触发同步的功能。我已经设置了功能作为webjob项目如下:具有Http触发功能的连续Azure Web工作

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下捻仪表板的功能,但我不知道我怎么能与HTTP请求触发功能上市在MS文档(here):

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

当我做出那个端点我得到一个404响应的请求 - 我需要什么才能做触发这些功能通过HTTP请求手动?

感谢, 瑞安

回答

2

我们可以用捻WebJob API启动或停止连续工作

POST的https:// {}用户:{}密码@ {SITENAME} .scm.azurewebsites.net/API/continuouswebjobs/{作业名称} /开始

我们可以从Azure WebApp publishSetting文件获取用户和密码信息。我们可以使用小提琴手

enter image description here

注意门户

enter image description here

测试REST API下载文件:如何创建Azure的功能,请参阅document

更新:

是有办法,我可以触发在连续作业的特殊功能?

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

我的工作是我们可以使用Webjob QueueTrigger。根据队列消息信息触发特定功能。 我们可以创建一个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

+0

谢谢汤姆 - 有没有一种方法可以触发连续工作中的特定功能?停止和启动当前作业将不会运行任何功能 - 它只是让预定功能等待预定时间正确? – rwdial

+1

如果你想在azure webjob中触发sepcific函数,我的漫游使用队列触发器。更多细节我已经更新了答案。 –

1

你看DOC对Azure的功能,但它看起来像你使用WebJobs(这是不同于Azure的功能)。

我建议使用Azure函数,在这种情况下,您的场景变得更直接。