【问题标题】:Overcome throttling in Office 365 with service account使用服务帐户克服 Office 365 中的限制
【发布时间】:2018-04-07 20:13:59
【问题描述】:

目前,我正在开发用于从给定组织的 Office 365 服务中获取和下载数据的应用程序。我使用 EWS、SharePoint 和 Microsoft Graph 等公共 API 来访问组织中给定用户(如 Outlook、日历、OneDrive)、组(团队网站内容、Planner、对话)和 SharePoint 内容的数据。我需要同时执行很多请求,但不幸的是我在此期间遇到了限制。互联网上有一些关于使用服务帐户以降低限制率的信息,但目前这些信息还不够。

如何使用服务帐户来克服 Office 365 中的限制?

【问题讨论】:

    标签: sharepoint office365 exchangewebservices microsoft-graph-api office365api


    【解决方案1】:

    您是否已经在使用服务帐户,或者您实际上是否拥有要检索其数据的每个用户的凭据?通常,避免限制的方法是获取对各个日历等具有模拟权限的服务帐户。在查询邮箱或日历时,服务帐户会模拟实际用户,因此计算连接和通信费用针对用户而不是服务帐户。这样,例如单个服务帐户可以为多个用户发起许多并行请求,而不会对实际服务帐户累积费用并导致限制。

    【讨论】:

    • 我目前不使用服务帐户。我也没有检索到其数据的每个用户的凭据。当我想获取任何用户的数据时,我使用组织管理员帐户。
    • 为了更清楚,我目前使用OAuth 2.0 authorization flow 为所有用户获取数据。我可以获得初始访问令牌并将其存储在某处。所以我可以随时从这个令牌中获取租户 ID。为了获取用户数据,我可以使用租户 ID 请求后续访问令牌(旧令牌过期),而无需组织管理员登录并明确同意。
    • 是的,我现在没有进行 OAuth,尽管我正在尝试弄清楚如何将它添加到我的应用程序中。我现在不能说模拟是如何处理这个问题的。
    • 能否提供一些您目前使用的方法的链接?
    • 其中一些有点旧,所以可能会有一些变化:
    【解决方案2】:

    我花了很多时间来处理这个问题。这是我们所做的:

    1) 将我们的自动化处理移至非高峰时段(例如下午 6 点至早上 6 点) 2)所有调用都需要有重试能力。 MS 说要使用 retry-after 标头中的值,但它总是 2 分钟。我会重试 20 分钟。如果在该时间段之后失败,我不会再试一个小时。

    使用服务帐户绝对是一种解决方法,尽管它很糟糕。在某些时候,MS 会再次调整算法,而你也会被搞砸。真正的答案是在一段时间内重试。

    【讨论】:

    • 首先,我需要尽快发送请求 - 如果用户在 SharePoint(站点、文档库、文件)中有大量数据,则下载该数据将需要更多时间,以防使用的重试周期大得多所需的最短重试时间。而且 SharePoint 请求也不会发送 retry-after 标头作为响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    相关资源
    最近更新 更多