2017-05-25 1 views
0

J'ai un outil de synchronisation qui utilise 'SyncFolderItems' de EWS Managed API pour récupérer les éléments modifiés dans un dossier Calendrier. Il fonctionne bien depuis 18 mois, mais cette semaine, deux clients ont tous deux connu le même problème. (Peut être une coïncidence). Les deux sont des clients Office 365.EWS SyncFolderItems me donne l'exception "Une erreur interne du serveur s'est produite L'opération a échoué."

La synchronisation a commencé à échouer et, suite à une analyse plus approfondie, l'appel de SyncFolderItems a échoué avec l'erreur "Une erreur interne du serveur s'est produite." Aucun autre détail donné dans l'erreur.

Je réinitialise la synchronisation (c'est-à-dire redéfinit syncstate sur null afin qu'elle synchronise à nouveau tout dans le dossier). Cela a bien fonctionné pour plusieurs itérations de pagination obtenant 250 éléments à la fois, mais à un moment donné, il a échoué. Je pensais que peut-être il y avait un élément avec beaucoup de données. J'ai réduit la taille de la page à 25 et cela a fonctionné OK pour un peu, puis échoué. Je l'ai réduit une taille de page de 1 et il échoue. Il y a 1250 éléments dans le dossier, donc je n'ai pas encore trouvé l'objet pour lequel il échoue. Cela semble incohérent et je me demande s'il y a un accélérateur qui a été réglé plus haut récemment?

Je pense que ma prochaine étape est de voir s'il y a un élément offensant et de le supprimer, mais il est difficile de savoir quel élément il pourrait être.

Quelqu'un at-il des suggestions pour ce qui pourrait mal tourner?

icc = service.SyncFolderItems(Connection.SourceID, ps, null, 1,                
         SyncFolderItemsScope.NormalItems, syncstate); 

Répondre

2

J'ai le même problème avec SyncFolderItems (..).

Le problème semble exister uniquement dans les dossiers publics? J'ai testé avec un dossier de calendrier public. Si j'appelle SyncFolderItems pour la première fois sans statut, je n'obtiens aucune erreur. Mais si j'ai un statut et supprime un élément dans le dossier public, j'obtiens cette erreur lors du prochain appel de SyncFolderItems().

 ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2016, TimeZoneInfo.Local); 
     service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx"); 
     service.Credentials = new WebCredentials("[email protected]", "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

+0

peut-être ajouter un code de travail pour aider à répondre à la question plus en détail. –

+0

J'ai amélioré ma réponse avec du code maintenant. –

+0

Oui - Je peux reproduire ceci. Utilisation de SyncFolderItems avec un dossier Calendar public. Ajout de nouveaux éléments dans le dossier, la synchronisation fonctionne correctement. Si je supprime un rendez-vous du dossier et essaie de synchroniser, j'obtiens l'erreur 'Une erreur de serveur interne s'est produite. L'opération a échoué. ' HResult: -2146233088; InnerException: Null; – Davidt