Office 365 EWS日历访问提供了ErrorTooManyObjectsOpened

Mik*_*keN 5 java exchangewebservices office365

我们使用针对Office 365的Exchange Web服务(EWS)API在用户的日历中创建日历事件。这对于本地部署来说效果很好,但是对于Office 365部署,我们似乎很快就达到了限制。

创建16个事件之后,在16个不同用户的日历中(通过服务帐户,使用对日历的委托访问),我们收到以下错误:

ErrorTooManyObjectsOpened-打开的并发连接太多

大约5分钟后,此错误将清除,我们可以继续创建事件。看来EWS服务器缓存了到邮箱的连接,而Office 365似乎只允许一次连接到16个邮箱。

我们为克服此错误做了很多尝试,但没有找到“最终”解决方案或解决方法。我们尝试了什么:

  • 使用模拟代替委派:这可行,但是从安全角度来看是不可行的。
  • 使用多个服务帐户:虽然每个帐户仍每5分钟限制为16个用户,但这可以起作用。
  • 我们尝试了X-AnchorMailboxand X-PreferServerAffinity标头,并在不使用HTTP和不使用HTTP cookie的情况下使请求保持活动状态,并在不使用HTTP cookie的情况下发出请求。从调试信息中我们可以看到,如果我们保留cookie /连接,我们通常会在同一前端服务器和后端服务器上工作;如果我们丢弃cookie却发送一个X-AnchorMailbox标头,那么我们通常会在不同的前端服务器上工作。
  • 我们尚未尝试过REST API,因为客户端凭据流尚不可用

只有CreateItems通话似乎会导致此问题,我们可以FindItems为许多用户提供服务而不会达到限制。

是否有人知道克服此限制的方法,例如,我们可以做一些呼叫来关闭Office 365端的缓存邮箱会话吗?或者会议室中是否有Office 365管理员可以阐明确切的限制条件,为什么它们比内部Exchange限制条件低很多?

其他详细信息:我们正在使用EWS Java API的修改版,但已进行了广泛的研究,并且非常确定此问题是在服务器端。

Jas*_*ton 1

不幸的是,您无法拨打电话来关闭连接。模拟是推荐的解决方案。您说从安全角度来看这是“不行”的,您能详细说明一下吗?