SyncFolderItems returns 删除了用户日历中未删除的项目

SyncFolderItems returns deleted items which are not deleted in the user's calendar

我正在使用 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 说约会被删除,而实际上并没有?

如果以后有人发现这个,我可以说我的问题是 exchange 提供的 uniqueID 区分大小写。我将这些 ID 存储在数据库中并进行了不区分大小写的查询。我发现我经常有两个 uniqueID,它们只有一个字母的大小写不同。