使用Azure WebJobs或Azure Functions托管与Sharepoint联机列表集成的控制台应用程序

时间:2018-09-06 17:42:38

标签: azure sharepoint azure-functions azure-webjobs

我正在开发一个SharePoint在线团队网站集。我想定义一个每天运行的工作,以执行以下操作:-

  1. 与SharePoint REST API集成,以将特定日期内的所有项目的到期日=今天。
  2. 发送电子邮件到共享组。

现在,当我在SharePoint内部部署中从事此类任务时,我会采用这种方法:-

1-我创建了一个与SharePoint REST API集成的.net控制台应用程序,获取相关项目,最后使用.NET WebClient发送电子邮件,如下所示:-

//do the checks then send an email to the related group
    using (MailMessage myMailMessage = new MailMessage())
            {
                SPOutboundMailServiceInstance smtpServer = currentsite.WebApplication.OutboundMailServiceInstance;
                System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient(smtpServer.Server.Address);
                myMailMessage.IsBodyHtml = true;
                myMailMessage.Subject = subject;
                myMailMessage.Body = body;
                smtp.Send(myMailMessage);
                //code goes here..
            }

2-将控制台应用程序放置在共享点服务器上。

3-使用Windows任务计划程序工具,我创建一个每天执行控制台应用程序的任务(例如,上午@ 1:00)。

所以现在不确定在sharepoint在线中如何托管控制台应用程序+如何计划它?。我已经将控制台应用程序中的所有代码都转换为使用客户端模块而不是服务器端模块。但是我的问题是关于托管和安排控制台应用程序。我主要在Azure中了解了这些选项:-

  1. WebJobs
  2. 天蓝色函数

但是我不确定哪个方法更好?以及这两个工具中的哪一个可以模仿使用Windows Task Scheduler调度控制台应用程序的方法?现在,我读了有关Azure函数的这篇文章https://anthonychu.ca/post/azure-functions-scheduled-executables/,但是我对function.jso文件的作用感到困惑。不确定我是否可以使用这些工具运行标准控制台应用程序?还有一个UI可以像Windows Task Scheduler一样配置触发计划吗? 谢谢

1 个答案:

答案 0 :(得分:1)

正如Jason所说,Functions是webjobs的后继者。 Azure Functions就是为了实现WebJobs SDK的核心目的,将其作为服务托管,并使其易于开始使用其他语言。我们还在这里引入“无服务器”概念,因为这样做非常有意义-我们知道我们的SDK如何扩展,因此我们可以为您做一些明智的事情。 Webjobs是部署在Web App中的后端控制台应用程序。

  

但我对function.json文件的功能感到困惑?

包含功能的配置元数据的function.json文件。一个函数只能有一个触发器绑定,并且可以有多个输入/输出绑定。以下是每种触发类型的示例。您可以参考此wiki

要将控制台应用程序部署到Azure WebJobs,可以参考此article压缩并上传控制台应用程序。要设置schedule trigger,您需要在控制台应用中添加settings.job

{
    "schedule": "0 */15 * * * *"
}

要将部署控制台应用程序部署到Azure Function,可以参考提供时间触发绑定的article

{
  "bindings": [
    {
      "type": "timerTrigger",
      "direction": "in",
      "schedule": "*/15 * * * * *",
      "runOnStartup": false
    }
  ]
}

因此,我建议使用Azure Function进行托管。