EWS API - 重新创建通知订阅时出错

jst*_*zik 80 exchange-server exchangewebservices office365

使用对Office365日历文件夹的订阅时,我ErrorReadEventsFailedSendNotification请求中收到了很多消息.此错误实质上意味着无法再找到订阅,并且服务器不再需要新通知.

检查Microsoft建议的错误处理,解决方案是使用自动发现重新发现ExternalEwsUrl或EwsPartnerUrl,并创建新订阅.

使用Office365,通过OAuth2服务帐户的组合,AutoDiscovery服务似乎几乎不可能,因此我一直将其https://outlook.office365.com/EWS/Exchange.asmx用作主要的EWS端点.

但是,当我尝试为特定日历文件夹创建新订阅时,我不断收到一般500 ErrorNoRespondingCASInDestinationSite错误:

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

奇怪的是这只是在收到初始ErrorReadEventsFailed错误后直接发生的.如果我再试一次,比如30秒,请求就会顺利通过.

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

这个问题可以通过指数退避解决方案解决,或者只是重试X次,直到请求通过.在我看来,当订阅"丢失"时,O365服务需要时间来更改Exchange服务器的DNS(这是我唯一能想到的).

任何帮助将不胜感激!

小智 3

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

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

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

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