Exchange EWS文件夹同步仅获取程序化更改

时间:2011-11-15 17:20:46

标签: c# exchange-server sync exchangewebservices

使用此代码我正在创建一个概念验证,用于通过 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然后运行同步操作我得到了预期的结果。出现一个反映创建约会的变更项目(它出现在展望中)。

Changes
============================

ChangeType: Create
ItemId: AAMkADRjYjE1NTVlLTk5ODktNGJiYS1hMTdjLTU2MzE5OGU5ZWNlOABGAAAAAADPxihYdsIG
TqRV5hKVbnQhBwASbprVW92zQZkfrIZIxiR2AEg2AOQDAAASbprVW92zQZkfrIZIxiR2AEg2KWYFAAA=

Subject: New Appointment
===========

现在,如果我通过Outlook添加/取消约会,则同步操作无法获取更改

Changes
============================

No changes to Sync.

为什么会这样?

1 个答案:

答案 0 :(得分:2)

您正在查看MoreChangesAvailable吗?如果您有许多更改(大于maxChangesReturned),您可能会在通话之间丢失它们。

您应该写出syncState以查看它包含的内容。确保它正确传递 - 它实际上是上次同步日期时间的哈希值。