SyncFolderItems返回用户日历

时间:2016-06-29 06:55:10

标签: c# calendar exchange-server exchangewebservices

我正在使用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说约会被删除呢?

1 个答案:

答案 0 :(得分:0)

如果有人在将来找到这个时间,我可以说我的问题是交换机提供的uniqueID是区分大小写的。我将这些ID存储在数据库中,并执行不区分大小写的查询。我发现我经常有两个uniqueID,只有一个字母的情况不同。