【问题标题】:Office 365 EWS calendar access giving ErrorTooManyObjectsOpenedOffice 365 EWS 日历访问提供 ErrorTooManyObjectsOpened
【发布时间】:2015-03-05 09:00:56
【问题描述】:

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

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

ErrorTooManyObjectsOpened - 打开的并发连接过多

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

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

  • 使用模拟代替委托:这可行,但从安全角度来看是不行的。
  • 使用多个服务帐户:这是可行的,但每个帐户仍限制为每 5 分钟约 16 个用户。
  • 我们尝试了X-AnchorMailboxX-PreferServerAffinity 标头,并且我们在有和没有HTTP 保持活动状态、有和没有保持HTTP cookie 的情况下发出请求。这没有任何区别。从调试信息中我们看到,如果我们保留 cookie/连接,我们通常会在同一个前端和后端服务器上结束,如果我们删除 cookie 但发送@,我们最终会在不同的前端服务器上987654326@ 标头。
  • 我们还没有尝试过 REST API,因为client credential flow is not available yet

似乎只有CreateItems 调用会导致此问题,我们可以为许多用户执行FindItems 而不会达到限制。

是否有人知道克服此限制的方法,例如,我们可以通过调用来关闭 Office 365 端的缓存邮箱会话吗?或者会议室中是否有 Office 365 管理员可以阐明确切的限制,以及为什么它们远低于本地 Exchange 限制?

其他细节:我们正在使用EWS Java API 的修改版本,但已经进行了一些广泛的研究,并且非常确定这个问题是服务器端的。

【问题讨论】:

  • 感谢您的回复,可惜MSDN社交话题中没有解决方案(恐怕我们都看过了)
  • 同意。我们也有类似的情况,微软建议的唯一解决方案是模拟,这对于我们的安全组织来说太锋利了,无法批准。非常不幸的设计。我们的解决方法是使用一个帐户池并在它们之间进行轮换,以便为帐户提供足够的时间来释放缓存的连接。不是一个很好的解决方案。

标签: java exchangewebservices office365


【解决方案1】:

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

【讨论】:

  • 感谢您的回复。有了委托权限,我们就有了一个细粒度的模型,我们可以在其中授予对某些用户的“日历”的“作者”权限。所以我们可以限制用户集、权限集和对象集。由于“作者”权限不授予更改现有事件的权利,因此不会出错。模拟是“全有或全无” - 如果我们的服务帐户具有模拟权限,它可以做所有事情(例如,阅读/删除/发送邮件,垃圾用户日历),而我们处理的组织的安全人员并不真正满意那个。
  • 我们也有类似的安全问题和顾虑。冒充是危险的——刀子太锋利了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多