EWS间歇性地返回ServiceError.ErrorItemNotFound

时间:2015-03-05 12:07:34

标签: c# exchangewebservices

我们有一个Outlook插件,可以在保存新的约会项目时回调我们的服务器。该插件返回Outlook项目ID。我们调用ConvertId来获取EWS项目ID。在这里,itemId是Outlook项目ID。

AlternateId _alternateId = new AlternateId();
_alternateId.Format = idFormat;
_alternateId.Mailbox = mailboxAddress;
_alternateId.UniqueId = itemId;

AlternateIdBase _altBase = _exchangeService.ConvertId(_alternateId, IdFormat.EwsId);

这总是有效的,或者至少我们总是得到一个EWS项目ID。

稍后,我们尝试获取约会项目以进行更新。在这里,itemId是EWS项目ID。

// get the appointment using the EWS item Id of the appointment
Appointment appointment;
try
{
    appointment = Appointment.Bind(_exchangeService, new ItemId(itemId), propertySet);
    _exchangeService.LoadPropertiesForItems(new[] { appointment }, ExchangeWebService.GetRequiredPropertySet());
    return new ExchangeAppointment(appointment, exchangeUserName);
}

问题是很少(可能是1%的时间)和间歇性地,ServiceError.ErrorItemNotFound的约会失败。同一个用户可以在我们遇到问题后立即创建一个新的约会,它会起作用。

我们认为ConvertId可能在Exchange服务器完全同步Outlook中的项目之前返回项目ID,因此我们每10秒添加一次重试,最多10分钟。在失败的所有情况下,我们都会看到重试发生但总是超过10分钟,此时我们放弃并记录异常。

我们可以在Outlook中看到受影响的项目,用户不会删除它们。

EWS日志只是镜像ServiceError.ErrorItemNotFound例外。

不知道下一步去哪儿?

1 个答案:

答案 0 :(得分:1)

我会看一下失败案例中的值。从ConvertId返回的值是什么,该项目的现有值是什么(您可以使用EWSEditor来获取此值)。也许通过比较这些值,您可以更好地了解正在发生的事情。