结合使用 Microsoft Azure WebJob 和 Office 365

通过使用 Microsoft Azure WebJob 或 Windows 任务计划程序在 SharePoint Online 中执行任务,可实施计时器作业功能。 计时器作业是一个重复性的计划的后台进程,用于在 SharePoint 中运行某些任务。

例如,你可能需要一个计时器作业将在 SharePoint 列表中输入的数据复制到数据库。 在 SharePoint Online 中,不能部署服务器场解决方案,计时器作业在过去就是这样部署的。 若要在 SharePoint Online 中实施类似的计时器作业功能,你需要将控制台应用程序作为 Azure WebJob 运行。 控制台应用程序通过使用客户端对象模型 (CSOM) 访问 SharePoint Online。

本文介绍了在将控制台应用程序部署为 Azure WebJob 以运行并访问你的 SharePoint Online 网站和内容时所涉及的基本概念。

注意

本文中的代码按原样提供,不提供任何明示或暗示的担保,包括对特定用途适用性、适销性或不侵权的默示担保。

创建控制台应用程序并将其作为 Azure WebJob 运行

若要将控制台应用程序设置为作为 Azure WebJob 运行,需执行以下操作:

  1. 创建 Azure WebJob 用于访问 SharePoint 网站和内容的组织帐户。

  2. 创建和设置控制台应用程序。

  3. 将代码添加到控制台应用程序。

  4. 将控制台应用程序作为 Azure WebJob 发布。

  5. 运行并验证 Azure WebJob。

创建组织帐户

你需要为 Azure WebJob 创建用于访问 SharePoint 网站和内容的帐户。 有关详细信息,请参阅向 Office 365 逐一或批量添加用户 - 管理员帮助

当 Azure WebJob 运行时,“修改者”字段将存储和显示组织帐户的“显示名称”中输入的值。 确保选择你的用户可轻松标识为 Azure WebJob 用于访问 SharePoint 的帐户的显示名称。

创建并设置控制台应用程序

若要创建作为 Azure WebJob 运行的控制台应用程序,请执行以下步骤:

  1. 创建新的控制台应用程序项目。 在 Visual Studio 中,选择“新建项目”>“Visual C#”>“控制台应用程序”>“确定”。

  2. 创建控制台应用程序后,选择“工具”>“NuGet 包管理器”>>“管理解决方案的 NuGet 包...”“联机”>“全部”。

  3. 搜索“适用于 SharePoint Web 工具包的应用”。

  4. 选择“安装”,然后选择“确定”。

  5. 选择“关闭”。

  6. 验证 SharePointContext.cs 和 TokenHelper.cs 是否已添加到控制台应用程序项目。

  7. 通过添加显示的 appSettings 元素,在 app.config 文件中保存帐户信息。 将 SPOAccountSPOPassword 更改为你之前创建的组织帐户的用户名和密码。

     <?xml version="1.0" encoding="utf-8" ?>
      <configuration>
       <startup> 
         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
       </startup>
       <appSettings>
         <add key="SPOAccount" value="admin@contoso.onmicrosoft.com"/>
         <add key="SPOPassword" value="Contoso"/>
       </appSettings>
      </configuration>
    

    警告

    App.config 以明文形式存储组织帐户的用户名和密码。 此方法仅用于演示目的,不能在你的 Azure WebJob 的生产部署中使用。 We recommend encrypting the password, or authenticating using OAuth with access tokens. For more information, see Kirk Evans blog post on Building a SharePoint Add-in as a Timer Job.

Add code to the console application

在 Program.cs 中,将以下代码添加到控制台应用。

  1. 添加 using 语句。

     using Microsoft.SharePoint.Client;
     using System.Security;
     using System.Configuration; 
    
  2. 将以下方法添加到你的类:

    • Main 登录你的 SharePoint 网站,然后使用 CSOM 在你的网站或内容上执行任务。 此代码示例使用 CSOM 查找列表并将列表中的总项数输出到控制台窗口。 使用 Azure WebJob 时,可在 WebJob 运行详细信息中查看控制台窗口输出,具体请参见运行并验证 Azure WebJob

    • GetSPOSecureStringPassword 从 app.config 中读取你的密码。

    • GetSPOAccountName 从 app.config 中读取你的用户名。

	static void Main(string[] args)
	    {
	        using (ClientContext context = new ClientContext("https://contoso.sharepoint.com"))
	        {
	            // Use default authentication mode.
	            context.AuthenticationMode = ClientAuthenticationMode.Default;                 
	            context.Credentials = new SharePointOnlineCredentials(GetSPOAccountName(), GetSPOSecureStringPassword());
	
	            // Add your CSOM code to perform tasks on your sites and content.
	
	            try
	            {
	                List objList = context.Web.Lists.GetByTitle("Docs");
	                context.Load(objList);
	                context.ExecuteQuery();
	
	                if (objList != null &amp;&amp; objList.ItemCount > 0)
	                {
	                    Console.WriteLine(objList.Title.ToString() + " has " + objList.ItemCount + " items.");
	                }
	
	            }
	            catch (Exception ex)
	            {
	                Console.WriteLine("ERROR: " + ex.Message);
	                Console.WriteLine("ERROR: " + ex.Source);
	                Console.WriteLine("ERROR: " + ex.StackTrace);
	                Console.WriteLine("ERROR: " + ex.InnerException);
	
	            }
	        }
	            
	    }
	
	private static SecureString GetSPOSecureStringPassword()
	{
	  try
	  {
	      Console.WriteLine("Entered GetSPOSecureStringPassword.");
	      var secureString = new SecureString();
	      foreach (char c in ConfigurationManager.AppSettings["SPOPassword"])
	      {
	          secureString.AppendChar(c);
	      }
	      Console.WriteLine("Constructed the secure password.");
	
	      return secureString;
	  }
	  catch
	  {
	      throw;
	  }
	}
	
	private static string GetSPOAccountName()
	{
	  try
	  {
	      Console.WriteLine("Entered GetSPOAccountName.");
	      return ConfigurationManager.AppSettings["SPOAccount"];
	  }
	  catch
	  {
	      throw;
	  }
	}
	

将控制台应用程序作为 Azure WebJob 发布

在完成控制台应用程序开发后,需要将控制台应用程序部署为 Azure WebJob。 若要将控制台应用程序作为 Azure WebJob 部署,你可:

Run and verify your Azure WebJob

完成前面的所有步骤后,你的 Azure WebJob 应在你的 Office 365 订阅中运行和执行任务。 有时,你可能需要执行维护或对 Azure WebJobs 进行故障排除。 若要验证 Azure WebJob 是否运行:

  • 如果 Azure WebJob 更新了 SharePoint 项(如列表项),“修改者”字段将显示 Azure WebJob 用于访问 SharePoint 的组织帐户。

  • 查看 Azure WebJob 的 WebJob 详细信息日志。 通过 WebJob 详细信息日志,你可以查看作业的上次运行时间、作业运行成功还是失败、WebJob 的任何输出(例如,调用 Console.WriteLine 时),以及有关作业运行的其他详细信息。 有关详细信息,请参阅“使用 WebJob 运行后台任务”中的查看作业历史记录

另请参阅