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

时间:2015-07-20 22:00:49

标签: exchange-server office365 exchangewebservices

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

检查Microsoft's recommended error handling,解决方案是使用自动发现重新发现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(这是我唯一能想到的)。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

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

当订阅丢失或不再可访问时,最好创建新订阅,并且不在新订阅中包含旧水印。使用旧水印重新订阅会导致事件的线性扫描,这是非常昂贵的。

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

您可以通过创建扩展属性定义来完成此操作。 我想这可能对你有帮助!!