EWS API - błąd podczas ponownego tworzenia subskrypcji powiadomień

81

Podczas pracy z subskrypcjami ściągania folderów kalendarza Office365 otrzymałem wiele ErrorReadEventsFailedwiadomości w formacieSendNotification żądaniu. Ten błąd zasadniczo oznacza, że ​​nie można już znaleźć subskrypcji, a serwer nie powinien już oczekiwać nowych powiadomień.

Sprawdzanie zalecanej przez Microsoft obsługi błędów , rozwiązaniem jest użycie automatycznego wykrywania, aby ponownie odkryć ExternalEwsUrl lub EwsPartnerUrl i utworzyć nową subskrypcję.

W Office365 usługa AutoDiscovery wydaje się prawie niemożliwa z kombinacją kont usługi OAuth2, więc używam go https://outlook.office365.com/EWS/Exchange.asmxjako głównego punktu końcowego EWS.

Jednak gdy próbuję utworzyć nową subskrypcję dla określonego folderu kalendarza, pojawia się ogólny 500 ErrorNoRespondingCASInDestinationSitebłąd:

Usługi internetowe Exchange nie są obecnie dostępne dla tego żądania, ponieważ żaden z serwerów dostępu klienta w lokacji docelowej nie może przetworzyć żądania.

Dziwne jest to, że dzieje się to bezpośrednio po otrzymaniu początkowego ErrorReadEventsFailedbłędu . Jeśli spróbuję ponownie za, powiedzmy, 30 sekund, żądanie przejdzie bez problemu.

Po przeprowadzeniu pewnych badań wydawało się, że większość użytkowników uznała za pomocne upewnienie się, że plik X-AnchorMailbox nagłówek został prawidłowo ustawiony dla użytkownika, pod którego konto usługi chce się podszyć. Dwukrotnie sprawdziłem ten nagłówek i rzeczywiście jest wysyłany wraz z prośbą o ponowną subskrypcję.

Ten problem można rozwiązać za pomocą wykładniczego rozwiązania wycofywania lub przez ponawianie X razy, aż żądanie zostanie zrealizowane. Wydaje mi się, że gdy abonament się „zgubi”, usługa O365 potrzebuje czasu na zmianę DNS serwera Exchange (to jedyne o czym przychodzi mi do głowy).

Każda pomoc byłaby bardzo mile widziana!

jstruzik
źródło
Prawie rok, czy znalazłeś na to rozwiązanie?
Marcus Höglund
1
Nic oficjalnego, ale zaimplementowałem swego rodzaju strategię „ponawiania”, aby spróbować złagodzić problem. Niestety, problem nadal występuje nawet po dodaniu X-AnchorMailboxnagłówka i używaniu plików cookie zaplecza Exchange podczas żądań. Wydaje się, że naprawia się po godzinach (od 30 sekund do całego dnia).
jstruzik
3
OK, zaimplementowałem również strategię ponawiania. Najbardziej niepokojące jest to, że czasami, gdy pojawia się ten błąd, jedyne, co muszę zrobić, to odtworzyć subskrypcję bieżącej usługi EWS. Ale jeśli to nie zadziała, muszę utworzyć nowe instancje usługi i wywołać funkcję automatycznego wykrywania, aby działała. Myślę, że serwer giełdowy coś robi (czyści, łączy się ponownie ... po prostu zgaduję.) I jeśli ten proces zajmie dużo czasu, skończysz z tym ...
Marcus Höglund

Odpowiedzi:

3

Na podstawie dokumentacji pod adresem: adresem https://msdn.microsoft.com/en-us/library/office/dn458788(v=exchg.150).aspx

Gdy subskrypcja zostanie utracona lub nie będzie już dostępna, najlepiej jest utworzyć nową subskrypcję i nie uwzględniać starego znaku wodnego w nowej subskrypcji. Ponowna subskrypcja ze starym znakiem wodnym powoduje liniowe skanowanie zdarzeń, co jest kosztowne.

Zamiast tego utwórz nową subskrypcję i porównaj właściwości folderu, aby wyszukać zmiany zawartości, które wystąpiły między utraconą subskrypcją a nową subskrypcją. Rozszerzone właściwości folderu, które zalecamy sprawdzić, to PR_LOCAL_COMMIT_TIME_MAX (0x670a0040)iPR_DELETED_COUNT_TOTAL (0x670b0003) .

Możesz to zrobić, tworząc rozszerzoną definicję właściwości. Myślę, że to może ci pomóc !!

Manoj S
źródło