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


81

使用Office 365日历文件夹的强制订阅ErrorReadEventsFailed时,SendNotification请求中收到很多消息。此错误实质上意味着无法再找到订阅,并且服务器不应再期望新的通知。

检查Microsoft推荐的错误处理,解决方案是使用自动发现来重新发现ExternalEwsUrl或EwsPartnerUrl,并创建一个新的订阅。

使用Office365,结合使用OAuth2服务帐户似乎几乎无法实现自动发现服务,因此我一直在使用它https://outlook.office365.com/EWS/Exchange.asmx作为EWS的主要端点。

但是,当我尝试为特定的日历文件夹创建新的订阅时,总是出现一般500 ErrorNoRespondingCASInDestinationSite错误:

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

奇怪的是,这仅在收到初始ErrorReadEventsFailed错误后立即发生。如果我再尝试30秒,请求将顺利通过。

经过研究后,似乎大多数用户发现确保X-AnchorMailbox为服务帐户希望模拟的用户正确设置标题是有帮助的。我仔细检查了此标头,它确实是在重新订阅请求中发送的。

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

任何帮助将不胜感激!


快一岁了,您找到解决方案了吗?
马库斯·霍格隆德(MarcusHöglund),2013年

1
没什么官方的,但是我已经实施了一种“重试”策略来试图缓解这个问题。不幸的是,即使添加了X-AnchorMailbox标题并在整个请求中使用了Exchange后端cookie ,该问题仍然会发生。似乎可以解决超时问题(介于30秒到整天之间的任何时间)。
jstruzik '16

3
好的,我还实施了重试策略。最令人不安的是,有时当发生此错误时,我唯一需要做的就是重新创建对当前EWS服务的订阅。但是,如果那行不通,我需要创建该服务的新实例并对其调用autodiscover以使其起作用。我认为Exchange服务器做一些事情(清洗,重新连接..just猜测。),如果这一过程需要长期你这个..结束了
马库斯·豪格伦德

Answers:


3

给定文档位于:https : //msdn.microsoft.com/zh-cn/library/office/dn458788(v=exchg.150).aspx

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.