EWS API – 重新创build通知订阅时出错

在处理与Office365日历文件夹的订阅时,我在SendNotification请求中收到了很多ErrorReadEventsFailed消息。 这个错误基本上意味着订阅不能再被发现,并且服务器不应该再期望新的通知。

检查微软build议的error handling ,解决scheme是使用自动发现重新发现ExternalEwsUrl或EwsPartnerUrl,并创build一个新的订阅。

使用Office365,AutoDiscovery服务似乎几乎不可能与OAuth2服务帐户的组合,所以我一直使用https://outlook.office365.com/EWS/Exchange.asmx作为主要的EWS端点。

但是,当我尝试创build新的订阅特定的日历文件夹,我不断得到一个通用的500 ErrorNoRespondingCASInDestinationSite错误:

Exchange Web服务目前不可用于此请求,因为目标站点中的任何客户端访问服务器都不能处理该请求。

奇怪的部分是这只发生在收到最初的ErrorReadEventsFailed错误后直接发生 。 如果我再次尝试,例如30秒,请求就会顺利通过。

在做了一些研究之后,似乎大多数用户发现有助于确保为服务帐户希望模拟的用户正确设置X-AnchorMailbox头。 我仔细检查了这个头,这确实是在请求重新订阅发送。

这个问题可以通过指数回退解决scheme解决,也可以通过重试X次直到请求通过。 在我看来,当订阅“丢失”,O365服务需要时间来更改Exchange服务器的DNS(这是我能想到的唯一的事情)。

任何帮助将不胜感激!

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

当订阅丢失或不再可访问时,最好创build一个新的订阅,而不在新的订阅中包含旧的水印。 重新订阅旧的水印会导致线性扫描事件,这是昂贵的。

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

你可以通过创build一个扩展属性定义来做到这一点。 我想这可能会帮助你!