【问题标题】:EWS API - Error when recreating notification subscriptionsEWS API - 重新创建通知订阅时出错
【发布时间】: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


【解决方案1】:

鉴于文档位于:https://msdn.microsoft.com/en-us/library/office/dn458788(v=exchg.150).aspx

当订阅丢失或不再可访问时,最好创建一个新订阅,并且在新订阅中不要包含旧水印。使用旧水印重新订阅会导致对事件进行线性扫描,这很昂贵。

相反,创建一个新订阅并比较文件夹属性以查找丢失订阅和新订阅之间发生的内容更改。我们建议您检查的扩展文件夹属性是PR_LOCAL_COMMIT_TIME_MAX (0x670a0040)PR_DELETED_COUNT_TOTAL (0x670b0003)

您可以通过创建扩展属性定义来做到这一点。 我想这可能对你有帮助!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-18
    • 2019-06-05
    • 1970-01-01
    • 2021-11-11
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多