首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用适用于Exchange Online帐户的Outlook Rest API并避免EWS限制?

如何使用适用于Exchange Online帐户的Outlook Rest API并避免EWS限制?
EN

Stack Overflow用户
提问于 2018-02-25 05:41:22
回答 1查看 472关注 0票数 1

我们正在使用Outlook REST API开发一个应用程序,它具有现代web客户端的大部分功能,其中包括相当多的对话操作,如加载文件夹中的对话,移动和删除对话等。

我在研究options Best way to achieve Conversation view for mail folder using Outlook REST API时确实遇到了这个问题

似乎在可能的“会话”端点上没有开发,所以目前我们不得不做相当多的请求来允许用户处理会话。例如,要删除会话,我们需要通过ConversationId上的筛选器获取会话消息(可能相当多),然后为每条消息向/delete端点发出请求。我们确实按照建议使用了批处理请求,但我不确定它们实际上是使它变得更好还是更坏。对于一些out Office365用户,我们一直收到"503 : ErrorMailboxStoreUnavailable - MapiExceptionRpcServerTooBusy:“错误。

很难确切地说出错误发生的原因,因为关于如何确定应用程序的执行情况以及限制是什么的信息非常少。

我绝对不认为我们达到了这里描述的REST API限制:(每10分钟内,每个用户10000个请求)

https://blogs.msdn.microsoft.com/exchangedev/2017/04/07/throttling-coming-to-outlook-api-and-microsoft-graph/

我还检查了Rate-Limit-Limit和Rate-Limit-Remaining标头,它们看起来都很好。

然而,并发请求似乎存在一些问题,我怀疑这可能与这里描述的限制有关:

https://msdn.microsoft.com/en-us/library/office/jj945066(v=exchg.150).aspx

我不是Exchange方面的专家,因此我很难找出问题所在。此外,我找不到有关rest API限制和Exchange限制之间关系的信息。例如,2个批量请求,每个请求20个,是否有可能突破这个限制: EWSMaxConcurrency (根据文档,27表示excel online )

查看我们的日志,我的第一个猜测是那些与会话相关的请求太贪婪了。

有什么我们可以遵循的指导方针来解决这种情况吗?

我将在这里粘贴错误,以防它有帮助。谢谢!

代码语言:javascript
复制
503. {"error":{"code":"ErrorMailboxStoreUnavailable","message":"The mailbox database is temporarily unavailable., MapiExceptionRpcServerTooBusy: Unable to get properties on object. (hr=0x80004005, ec=2419)
Diagnostic context:
    ......
    Lid: 64625   StoreEc: 0x97F     
    Lid: 52788  
    Lid: 55847   EMSMDBPOOL.EcPoolSessionDoRpc called [length=117]
    Lid: 43559   EMSMDBPOOL.EcPoolSessionDoRpc returned [ec=0x97F][length=522][latency=1015]
    Lid: 32881   StoreEc: 0x97F     
    Lid: 50035  
    Lid: 64625   StoreEc: 0x97F     
    Lid: 52788  
    Lid: 55847   EMSMDBPOOL.EcPoolSessionDoRpc called [length=117]
    Lid: 43559   EMSMDBPOOL.EcPoolSessionDoRpc returned [ec=0x97F][length=522][latency=1000]
    Lid: 32881   StoreEc: 0x97F     
    Lid: 50035  
    Lid: 64625   StoreEc: 0x97F     
    Lid: 52788  
    Lid: 55847   EMSMDBPOOL.EcPoolSessionDoRpc called [length=117]
    Lid: 43559   EMSMDBPOOL.EcPoolSessionDoRpc returned [ec=0x97F][length=522][latency=1015]
    Lid: 32881   StoreEc: 0x97F     
    Lid: 50035  
    Lid: 64625   StoreEc: 0x97F     
    Lid: 52788  
    Lid: 55847   EMSMDBPOOL.EcPoolSessionDoRpc called [length=117]
    Lid: 43559   EMSMDBPOOL.EcPoolSessionDoRpc returned [ec=0x97F][length=522][latency=1015]
    Lid: 32881   StoreEc: 0x97F     
    Lid: 50035  
    Lid: 64625   StoreEc: 0x97F     
    Lid: 63028  
    Lid: 52176   ClientVersion: 15.20.527.7
    Lid: 50032   ServerVersion: 15.20.527.6000
    Lid: 50128  
    Lid: 1494    ---- Remote Context Beg ----
    Lid: 48506   StoreEc: 0x80040401
    Lid: 32796   StoreEc: 0x80040401
    Lid: 43632   StoreEc: 0x80040401
    Lid: 61692   StoreEc: 0x80040401
    Lid: 34356   StoreEc: 0x97F     
    Lid: 1750    ---- Remote Context End ----
    Lid: 1494    ---- Remote Context Beg ----
    Lid: 48506   StoreEc: 0x80040401
    Lid: 32796   StoreEc: 0x80040401
    Lid: 43632   StoreEc: 0x80040401
    Lid: 61692   StoreEc: 0x80040401
    Lid: 34356   StoreEc: 0x97F     
    Lid: 1750    ---- Remote Context End ----
    Lid: 50288  
    Lid: 23354   StoreEc: 0x973     
    Lid: 35180  
    Lid: 25913  
    Lid: 21817   ROP Failure: 0x973     
    Lid: 20385  
    Lid: 28577   StoreEc: 0x973     
    Lid: 32001  
    Lid: 29953   StoreEc: 0x973     
    Lid: 32768  
    Lid: 33024   StoreEc: 0x973     "}
EN

回答 1

Stack Overflow用户

发布于 2018-03-02 01:24:43

不知道这会有多大帮助,但FWIW。有一次,我问了一个关于批处理操作及其对节流的影响的类似问题,并从一个在该领域工作的PM那里得到了以下答案:

无论是批处理API调用还是单个API调用,我们都会根据它消耗的服务资源来决定是否进行限制,而不是根据调用的数量。因此,我们不会因为应用程序批量处理API请求而惩罚它。例如,如果5个API调用占用了我们20个单位的服务资源,您使用这5个API进行批量调用,我们会将其视为相同的,即20个单位的服务资源。在本例中,我忽略了处理批处理请求和处理5个单独请求的开销之间的差异。实际上,批量请求会比5个单独的请求便宜一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48967913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档