我们有一个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
例外。
不知道下一步去哪儿?
答案 0 :(得分:1)
我会看一下失败案例中的值。从ConvertId
返回的值是什么,该项目的现有值是什么(您可以使用EWSEditor来获取此值)。也许通过比较这些值,您可以更好地了解正在发生的事情。