我正在使用EWS托管API在我们自己的日历程序和Exchange日历之间实现同步。一切似乎进展顺利,但当我制作一个小程序来定期更新我们系统和Exchange中的约会时,为了测试同步服务,我注意到我们数据库中的约会数量正在稳步下降。事实证明,当我使用SyncFolderItems获取更新时,Exchange有时会说如果约会没有被删除。所以我最终在我们的系统中将其删除,但它仍然存在于用户的交换日历中。我的第一个想法是,Exchange中的某些逻辑导致约会被删除并重新制作,但如果是这种情况,我应该已经通知我也创建了约会。我不是(除非我自己创造一个)。
我试过谷歌搜索,但我找不到任何相关的东西。 90%的结果是关于如何找到已删除项目的问题。
这是我从Exchange获取更改的方式:
do
{
ChangeCollection<ItemChange> icc = m_ECService.SyncFolderItems(
new FolderId(WellKnownFolderName.Calendar),
PropertySet.IdOnly,
m_IgnoredExchangeIDs,
512,
SyncFolderItemsScope.NormalItems,
m_syncStates[m_Employee.EmployeeID]);
m_syncStates[m_Employee.EmployeeID] = icc.SyncState;
foreach (ItemChange change in icc)
{
switch (change.ChangeType)
{
case ChangeType.Create:
AppointmentCreatedInExchange(change.ItemId.UniqueId);
break;
case ChangeType.Delete:
AppointmentDeletedInExchange(change.ItemId.UniqueId);
break;
case ChangeType.Update:
AppointmentUpdatedInExchange(change.ItemId.UniqueId);
break;
default:
break;
}
}
MoreChangesAvailable = icc.MoreChangesAvailable;
} while (MoreChangesAvailable);
m_IgnoredExchangeIDs是我在从交换机请求更新之前从我们的数据库发送的项目的ID列表。 AppointmentCreated / Deleted / Updated功能更新我们的数据库以匹配来自交换的信息。
这里发生了什么?为什么Exchange说约会被删除呢?
答案 0 :(得分:0)
如果有人在将来找到这个时间,我可以说我的问题是交换机提供的uniqueID是区分大小写的。我将这些ID存储在数据库中,并执行不区分大小写的查询。我发现我经常有两个uniqueID,只有一个字母的情况不同。