【发布时间】:2015-10-10 04:48:51
【问题描述】:
在处理对 Office365 日历文件夹的请求订阅时,我在 SendNotification 请求中收到了很多 ErrorReadEventsFailed 消息。此错误实质上意味着无法再找到订阅,并且服务器不应再期待新的通知。
查看Microsoft's recommended error handling,解决方法是使用Autodiscover重新发现ExternalEwsUrl或EwsPartnerUrl,并新建订阅。
对于 Office365,AutoDiscovery 服务与 OAuth2 服务帐户的组合似乎几乎不可能,因此我一直使用 https://outlook.office365.com/EWS/Exchange.asmx 作为主要 EWS 端点。
但是,当我尝试为特定日历文件夹创建新订阅时,我不断收到一般的 500 ErrorNoRespondingCASInDestinationSite 错误:
Exchange Web 服务当前无法用于此请求,因为目标站点中的客户端访问服务器都无法处理该请求。
奇怪的是这只会在收到初始ErrorReadEventsFailed 错误后直接发生。如果我在 30 秒后重试,请求就会顺利通过。
在进行一些研究后,似乎大多数用户发现确保为服务帐户希望模拟的用户正确设置 X-AnchorMailbox 标头很有帮助。我仔细检查了这个标头,它确实是随着重新订阅请求一起发送的。
这个问题可以通过指数回退解决方案来解决,或者只需重试 X 次直到请求通过。在我看来,当订阅“丢失”时,O365 服务需要时间来更改 Exchange 服务器的 DNS(这是我唯一能想到的)。
任何帮助将不胜感激!
【问题讨论】:
-
快一年了,你找到解决办法了吗?
-
没有什么官方的,但我已经实施了一种“重试”策略来试图缓解这个问题。不幸的是,即使在添加
X-AnchorMailbox标头并在整个请求中使用 Exchange 后端 cookie 后,问题仍然存在。似乎可以在加班时自行修复(30 秒到一整天之间的任何时间)。 -
好的,我也实现了重试策略。最令人不安的是,有时当发生此错误时,我唯一需要做的就是重新创建对当前 EWS 服务的订阅。但是当这不起作用时,我需要创建一个新的服务实例并在其上调用自动发现以使其工作。我认为交换服务器正在做某事(清理,重新连接..只是猜测。)如果这个过程需要很长时间,你最终会得到这个..
标签: exchange-server office365 exchangewebservices