Exchange EWS文件夹同步只拾取程序性更改

本文关键字:程序性 EWS 文件夹 同步 Exchange | 更新日期: 2023-09-27 18:14:57

使用这段代码,我创建了一个概念验证,通过Exchange EWS Managed API将My Exchange (2007 SP1)驱动的outlook日历同步到其他日历系统。

    static void SyncAppointments()
    {
        ChangeCollection<ItemChange> changeCollection = service.SyncFolderItems(new FolderId(WellKnownFolderName.Calendar), PropertySet.FirstClassProperties, null, 512, SyncFolderItemsScope.NormalItems, syncState);
        Console.WriteLine("'n'n");
        Console.WriteLine("Changes");
        Console.WriteLine("============================'n");
        if (changeCollection.Count > 0) {
            foreach (ItemChange item in changeCollection)
            {
                Console.WriteLine("ChangeType: " + item.ChangeType.ToString());
                Console.WriteLine("ItemId: " + item.ItemId.UniqueId);
                Console.WriteLine("Subject: " + item.Item.Subject);
                Console.WriteLine("==========='n");
            }
        }
        else {
            Console.WriteLine("No changes to Sync.'n");
        }
        syncState = changeCollection.SyncState;
    }

这对于大部分来说非常有效,我得到默认的第一组更改(所有项目),随后我得到No changes to Sync.…现在,当我通过EWS创建一个约会,然后运行同步操作时,我得到了预期的结果。将出现一个反映约会创建(并显示在outlook中)的更改项。

Changes
============================
ChangeType: Create
ItemId: AAMkADRjYjE1NTVlLTk5ODktNGJiYS1hMTdjLTU2MzE5OGU5ZWNlOABGAAAAAADPxihYdsIG
TqRV5hKVbnQhBwASbprVW92zQZkfrIZIxiR2AEg2AOQDAAASbprVW92zQZkfrIZIxiR2AEg2KWYFAAA=
Subject: New Appointment
===========

现在如果我通过outlook添加/取消约会,同步操作不会拾取更改

Changes
============================
No changes to Sync.

为什么会这样?

Exchange EWS文件夹同步只拾取程序性更改

您是否检查MoreChangesAvailable ?如果您有许多更改(大于maxChangesReturned),则可能在调用之间丢失它们。

你应该写出syncState来看看它包含了什么。确保它被正确传递-它本质上是最后一次同步日期时间的散列。