SharePoint 加载项模型的远程计时器作业

在新 SharePoint 外接程序模型中实施计时器作业的方法与使用完全信任代码不同。 在典型的完全信任代码 (FTC)/场解决方案场景中,使用 SharePoint 服务器端对象模型的代码创建 SharePoint 计时器作业,通过场解决方案对其进行部署并将其托管在 SharePoint 管理中心网站中。 在此场景中,SharePoint 同时处理计时器作业的计划和执行。

在 SharePoint 外接程序模型场景中,计时器作业在 SharePoint 外部创建及计划。 在此场景中,SharePoint 不负责计时器作业的计划或执行。

高级别准则

作为经验法则,我们希望提供下列创建计时器作业的高级别准则。

  • 计时器作业应在 SharePoint 外部实施。
  • 激活计时器作业应在 SharePoint 外部实施。
  • 计时器作业应通过服务帐户或 OAuth 进行身份验证。

创建计时器作业的难点

创建 Office 365 租赁的计时器作业中最难之处在于无法向 Office 365 租赁部署服务器场范围解决方案。 没有服务器场范围解决方案,就无法部署 SharePoint 计时器作业。

创建计时器作业的新方法是在 SharePoint 外部进行构建并且也在 SharePoint 外部处理计划。 请考虑以下与本地 SharePoint 环境的 SharePoint 计时器作业相关的因素。

  • SharePoint 附带了 SharePoint 计划程序试图跟上的现成计时器作业。 确定-你可以将实施代码移动到 Azure 或其他环境来减少 SharePoint 服务器上所需的内存量并降低处理器速度。
  • 因此将计时器作业相关的计划和实施代码移至其他的服务器可以使 SharePoint 服务器具有更好的伸缩性和稳定性。

计划计时器作业的选项

有多个选项可以实施计时器作业的计划。

  • Windows 计划程序
    • Windows 服务
  • Azure WebJob
    • Azure 工作进程

Windows 计划程序

在此模式下,Windows 计划程序处理计时器作业相关的计划工作。 实施代码可以是一个控制台应用程序、PowerShell 脚本或 Windows 计划程序可以调用的任何其他代码。

Windows 服务子选项

Windows 服务具有与 Windows 计划程序相同的特征。 Microsoft 并不建议使用此模式,但因为其已广泛应用,所以值得一提。

何时适合使用 Windows 计划程序?

当你无法访问 Azure 的订阅来使用 Azure WebJobs 计划计时器作业时,使用 Windows 计划程序是一个不错的选择,因为此选项可以在任何具有 Windows 操作系统的计算机上实施。

  • 需要其他硬件以运行 Windows 计划程序。
  • 需要其他硬件以运行计时器作业代码。

开始使用

下列文章使用 Windows 计划程序模式并提供帮助你入门的代码示例。

Azure WebJob

在此模式中,Azure WebJob 处理计时器作业相关的计划工作并且包括实施代码。

  • 不需要其他硬件以运行 Azure WebJob(计划和实施代码)
  • 由于其将 Azure WebJob 用于计划和实施代码,使其易于在某个位置进行托管,因此具有优势。

Azure 辅助角色子选项

Azure 辅助角色具有与 Azure WebJob 相同的特征。 Microsoft 并不建议使用此模式,但因为其已广泛应用,所以值得一提。

何时适合使用 Azure WebJob?

当你可以访问 Azure 的订阅以使用 Azure WebJobs 计划计时器作业时。

开始使用

下列文章介绍了 Azure WebJob 模式并提供了帮助你入门的代码示例。

身份验证选项

为使计时器作业与 SharePoint 进行交互,计时器作业必须通过身份验证。 目前,可以使用两种模式对计时器作业进行身份验证。

  • 使用服务帐户
  • 使用 OAuth

使用服务帐户

在此模式中,你可以指定一个或多个用于对计时器作业进行身份服务的服务帐户。

  • 服务帐户在 SharePoint 中指定。

    • 在 Office 365 租赁中,根据计时器作业具有的功能服务帐户可能需要向其分配的 Office 365 许可证。
    • 你可以在每个计时器作业的基础上创建服务帐户或使用适用于所有计时器作业的单个帐户。
    • 为服务帐户创建清晰的描述性名称,这样就能轻松地对其执行的操作进行追踪。

    For example: If your timer job modifies list items, the Modified By column for the list items will display the name of the service account associated with the timer job.

  • 对服务帐户进行身份验证时,必须检索服务帐户的用户名和密码。

    • 以下代码片段阐释了使用用户名和密码进行身份验证。

    • 注意要将用户名和密码以安全的方式进行存储和检索。

      using (ClientContext context = new ClientContext("https://tenancy.sharepoint.com"))
      {
        // Use default authentication mode
        context.AuthenticationMode = ClientAuthenticationMode.Default;
        // Specify the credentials for the account that will execute the request
        context.Credentials = new SharePointOnlineCredentials("User Name", "Password");
      }
      

开始使用

下列文章介绍了如何使用服务帐户身份验证模式并提供了帮助你入门的代码示例。

使用 OAuth

在此模式下,你在 SharePoint 或 Azure Active Directory 中指定应用程序,并使用应用程序相关的的身份验证令牌进行身份验证。

  • 使用 SharePoint 应用程序进行身份验证时,你创建一个应用主体并向其分配权限。

    • 在此模式中,可以通过提供商托管的 SharePoint 外接程序或控制台应用程序来实施计时器作业。
    • 若要为提供程序托管的 SharePoint 外接程序或控制台应用程序注册应用主体,请使用 SharePoint 中的 AppRegNew 页面。

    通过以下 URL 访问此页面 http://<tenancy>/<site>/_layouts/AppRegNew.aspx

    • 若要授予对应用主体的权限,请使用 SharePoint 中的 AppInv 页面。

    通过以下 URL 访问此页面 http://<tenancy>/<site>/_layouts/AppInv.aspx

  • 计时器作业使用仅限应用权限,因为其没有与之相关联的交互用户。

    • 以下代码片段阐释了获取访问令牌并使用仅限应用权限来对 SharePoint 进行身份验证。

      string accessToken = TokenHelper.GetAppOnlyAccessToken(TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken;
      
      using(var clientContext = TokenHelper.GetClientContextWithAccessToken(siteUri.ToString(),accessToken))
      {
        //Implement timer job code
      }
      
  • 使用 Azure Active Directory 应用程序进行身份验证时,你在 Azure 门户中创建 Azure Active Directory 应用程序并向其分配权限。

    • 在此模式中,可以通过提供商托管的 SharePoint 外接程序或控制台应用程序来实施计时器作业。
    • 在此模式下,你与 Active Directory 身份验证库或 Microsoft Graph API 进行交互以检索访问令牌。
    • 访问令牌用于对 SharePoint(也可能对 Office 365 租赁中的其他 Office 365 服务)进行身份验证。

开始使用

下列文章介绍了 OAUth 身份验证模式并提供了帮助你入门的代码示例。

PnP 示例

适用于

  • Office 365 多租户 (MT)
  • Office 365 专用 (D) 部分
  • SharePoint 2013 本地 – 部分

专用模式和本地模式在使用 SharePoint 外接程序模型技术方面完全相同,但在可以使用的可能的技术方面存在差异。