C# Exchange EWS文件夹同步仅拾取编程更改

C# Exchange EWS文件夹同步仅拾取编程更改,c#,exchange-server,sync,exchangewebservices,C#,Exchange Server,Sync,Exchangewebservices,使用这段代码,我创建了一个概念验证,用于通过将Exchange(2007 SP1)驱动的outlook日历同步到其他日历系统 static void SyncAppointments() { ChangeCollection<ItemChange> changeCollection = service.SyncFolderItems(new FolderId(WellKnownFolderName.Calendar), PropertySet.Firs

使用这段代码,我创建了一个概念验证,用于通过将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;
    }
Changes
============================

No changes to Sync.
现在,如果我通过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;
    }
Changes
============================

No changes to Sync.

为什么会这样?

您是否正在检查
更多更改是否可用?如果有许多更改(大于
maxChangesReturned
),则可能会在两次调用之间丢失这些更改

您应该写出syncState以查看它包含的内容。确保它被正确传递-它本质上是上一次同步日期时间的散列