【发布时间】: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-AnchorMailbox和X-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