EWS API - Fehler beim Neuerstellen von Benachrichtigungsabonnements

81

Bei der Arbeit mit Pull-Abonnements für Office365-Kalenderordner wurden ErrorReadEventsFailedin der SendNotificationAnforderung viele Nachrichten angezeigt. Dieser Fehler bedeutet im Wesentlichen, dass das Abonnement nicht mehr gefunden werden kann und der Server keine neuen Benachrichtigungen mehr erwarten sollte.

Wenn Sie die von Microsoft empfohlene Fehlerbehandlung überprüfen, besteht die Lösung darin, mithilfe der automatischen Erkennung die externe EwsUrl oder EwsPartnerUrl erneut zu ermitteln und ein neues Abonnement zu erstellen.

Mit Office365 scheint der AutoDiscovery-Dienst mit einer Kombination von OAuth2-Dienstkonten nahezu unmöglich zu sein, sodass ich ihn https://outlook.office365.com/EWS/Exchange.asmxals Haupt-EWS-Endpunkt verwendet habe.

Wenn ich jedoch versuche, ein neues Abonnement für den jeweiligen Kalenderordner zu erstellen, wird immer wieder ein allgemeiner 500 ErrorNoRespondingCASInDestinationSiteFehler angezeigt:

Exchange-Webdienste sind derzeit für diese Anforderung nicht verfügbar, da keiner der Clientzugriffsserver am Zielstandort die Anforderung verarbeiten konnte.

Der seltsame Teil ist, dass dies erst direkt nach Erhalt des anfänglichen ErrorReadEventsFailedFehlers geschieht . Wenn ich es beispielsweise in 30 Sekunden erneut versuche, wird die Anforderung problemlos ausgeführt.

Nach einigen Recherchen schien es den meisten Benutzern hilfreich zu sein, sicherzustellen, dass der X-AnchorMailboxHeader für den Benutzer, für den sich das Dienstkonto ausgeben möchte, richtig eingestellt war. Ich habe diesen Header noch einmal überprüft, und er wird tatsächlich zusammen mit der Aufforderung zum erneuten Abonnieren gesendet.

Dieses Problem kann durch eine exponentielle Back-Off-Lösung oder durch einfaches erneutes Versuchen von X gelöst werden, bis die Anforderung ausgeführt wird. Es scheint mir, dass der O365-Dienst Zeit benötigt, um das DNS des Exchange-Servers zu ändern, wenn das Abonnement "verloren" geht (das ist das einzige, woran ich denken kann).

Jede Hilfe wäre sehr dankbar!

jstruzik
quelle
Fast ein Jahr alt, haben Sie eine Lösung dafür gefunden?
Marcus Höglund
1
Nichts offizielles, aber ich habe eine Art "Wiederholungs" -Strategie implementiert, um zu versuchen, das Problem zu mindern. Leider tritt das Problem auch nach dem Hinzufügen des X-AnchorMailboxHeaders und der Verwendung des Exchange-Backend-Cookies bei allen Anforderungen weiterhin auf. Scheint sich Überstunden zu machen (irgendwo zwischen 30 Sekunden und einem ganzen Tag).
Jstruzik
3
Ok, ich habe auch eine Wiederholungsstrategie implementiert. Das Beunruhigendste ist, dass ich manchmal, wenn dieser Fehler auftritt, nur ein Abonnement für den aktuellen EWS-Service neu erstellen muss. Aber wenn das nicht funktioniert, muss ich neue Instans des Dienstes erstellen und die automatische Erkennung aufrufen, damit es funktioniert. Ich denke, der Exchange-Server macht etwas (Bereinigen, erneutes Verbinden ... nur raten.) Und wenn dieser Prozess zu lange dauert, endet dies damit.
Marcus Höglund

Antworten:

3

Angesichts der Dokumentation unter: https://msdn.microsoft.com/en-us/library/office/dn458788(v=exchg.150).aspx

Wenn ein Abonnement verloren geht oder nicht mehr verfügbar ist, erstellen Sie am besten ein neues Abonnement und nehmen Sie das alte Wasserzeichen nicht in das neue Abonnement auf. Das erneute Abonnieren mit dem alten Wasserzeichen führt zu einem linearen Scan nach Ereignissen, was kostspielig ist.

Erstellen Sie stattdessen ein neues Abonnement und vergleichen Sie die Ordnereigenschaften, um nach Inhaltsänderungen zu suchen, die zwischen dem verlorenen Abonnement und dem neuen Abonnement aufgetreten sind. Die von Ihnen empfohlenen erweiterten Ordnereigenschaften sind PR_LOCAL_COMMIT_TIME_MAX (0x670a0040)und PR_DELETED_COUNT_TOTAL (0x670b0003).

Sie können dies tun, indem Sie eine erweiterte Eigenschaftsdefinition erstellen. Ich denke das kann dir helfen !!

Manoj S.
quelle