我们正在使用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个请求)
我还检查了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 )
查看我们的日志,我的第一个猜测是那些与会话相关的请求太贪婪了。
有什么我们可以遵循的指导方针来解决这种情况吗?
我将在这里粘贴错误,以防它有帮助。谢谢!
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 "}发布于 2018-03-02 01:24:43
不知道这会有多大帮助,但FWIW。有一次,我问了一个关于批处理操作及其对节流的影响的类似问题,并从一个在该领域工作的PM那里得到了以下答案:
无论是批处理API调用还是单个API调用,我们都会根据它消耗的服务资源来决定是否进行限制,而不是根据调用的数量。因此,我们不会因为应用程序批量处理API请求而惩罚它。例如,如果5个API调用占用了我们20个单位的服务资源,您使用这5个API进行批量调用,我们会将其视为相同的,即20个单位的服务资源。在本例中,我忽略了处理批处理请求和处理5个单独请求的开销之间的差异。实际上,批量请求会比5个单独的请求便宜一点。
https://stackoverflow.com/questions/48967913
复制相似问题