在处理 Office365日历文件夹的拉订阅时,我在 SendNotification
请求中收到了很多 ErrorReadEventsFailed
消息。此错误实质上意味着不再能够找到订阅,服务器不应该再期待新的通知。
选中 Microsoft 推荐的错误处理,解决方案是使用自动发现重新发现 ExternalEwsUrl 或 EwsPartnerUrl,并创建一个新订阅。
对于 Office365,使用 OAuth2服务帐户的组合,AutoDiscovery 服务似乎几乎不可能,因此我一直使用 https://outlook.office365.com/EWS/Exchange.asmx
作为主要的 EWS 端点。
但是,当我尝试为特定的日历文件夹创建一个新的订阅时,我总是得到一个通用的 500 ErrorNoRespondingCASInDestinationSite
错误:
ExchangeWeb 服务当前不可用于此请求,因为目标站点中的客户端访问服务器都无法处理此请求。
奇怪的部分是 这只有在接收到初始 ErrorReadEventsFailed
错误后才会直接发生。如果我在30秒内再次尝试,请求就会顺利通过。
在做了一些研究之后,似乎大多数用户发现确保为服务帐户希望模拟的用户正确设置 X-AnchorMailbox
头是有帮助的。我反复检查了这个头,它确实是沿着重新订阅请求发送的。
这个问题可以通过指数后退解决方案来解决,或者只是重试 X 次,直到请求通过。在我看来,当订阅“丢失”时,O365服务需要时间来更改 Exchange 服务器的 DNS (这是我唯一能想到的)。
任何帮助都将不胜感激!