我有一个同步工具,它使用EWS托管API'SyncFolderItems'来检索日历文件夹中的已更改项目。它已经运行了18个月左右,但本周两个客户都遇到了同样的问题。 (可能是巧合)。两者都是Office 365客户。
同步开始未能完成,并且在进一步分析时,SyncFolderItems调用失败并显示错误“发生内部服务器错误。操作失败。”错误中没有进一步的详细信息。
我重置同步(即将syncstate设置为null,以便再次同步文件夹中的所有内容)。它适用于几次分页迭代,一次获得250个项目,但它们在某些时候失败了。
我想也许有一个项目有很多数据。我将页面大小减小到25,它可以正常工作,然后失败了。我将页面大小减小为1并且失败了。文件夹中有1250个项目,所以我还没有找出它失败的项目。这似乎不一致,我想知道最近是否有一个更高的油门?
我认为我的下一步是查看是否有一个违规项目并将其删除,但是它可能会解决它可能是哪个项目。
有没有人对可能出现的问题有任何建议?
icc = service.SyncFolderItems(Connection.SourceID, ps, null, 1,
SyncFolderItemsScope.NormalItems, syncstate);
答案 0 :(得分:2)
我对SyncFolderItems(..)有同样的问题。
问题似乎只存在于公共文件夹中?我测试了一个公共日历文件夹。如果我第一次调用SyncFolderItems没有状态,我没有错误。但是,如果我有状态并删除公用文件夹中的一个项目,则在下次调用SyncFolderItems()时会出现此错误。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2016, TimeZoneInfo.Local);
service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
service.Credentials = new WebCredentials("x.y@germany.de", "pwd");
Folder f1 = Folder.Bind(service, new FolderId("SOMEFOLDERID OF A PUBLIC CALENDAR FOLDER"), BasePropertySet.FirstClassProperties);
Console.WriteLine(f1.DisplayName);
String status = "";
do
{
ChangeCollection<ItemChange> changes = service.SyncFolderItems(f1.Id, BasePropertySet.IdOnly, null, 100, SyncFolderItemsScope.NormalItems, status);
Console.Write(changes.Count+",");
status = changes.SyncState;
} while (true);
ServerInfo:{15.01.1101.019} V2017_04_14