EWS API-알림 구독을 다시 만들 때 오류 발생


81

Office365 일정 폴더에 대한 끌어 오기 구독으로 작업 할 때 요청 ErrorReadEventsFailed에서 많은 메시지 를 받았습니다 SendNotification. 이 오류는 본질적으로 구독을 더 이상 찾을 수 없으며 서버가 더 이상 새 알림을 기대하지 않아야 함을 의미합니다.

Microsoft의 권장 오류 처리를 확인 하면 해결 방법은 Autodiscover를 사용하여 ExternalEwsUrl 또는 EwsPartnerUrl을 다시 검색하고 새 구독을 만드는 것입니다.

Office365에서는 OAuth2 서비스 계정 조합으로 AutoDiscovery 서비스가 거의 불가능 해 보이므로 https://outlook.office365.com/EWS/Exchange.asmx기본 EWS 끝점 으로 사용 하고 있습니다.

그러나 특정 일정 폴더에 대한 새 구독을 만들려고하면 일반 500 ErrorNoRespondingCASInDestinationSite오류가 계속 발생합니다.

대상 사이트의 클라이언트 액세스 서버가 요청을 처리 할 수 ​​없기 때문에 현재이 요청에 대해 Exchange 웹 서비스를 사용할 수 없습니다.

이상한 부분은 이것이 초기 ErrorReadEventsFailed오류를 받은 직후에만 발생한다는 것 입니다. 예를 들어 30 초 후에 다시 시도하면 요청이 문제없이 진행됩니다.

조사 결과 대부분의 사용자 X-AnchorMailbox는 서비스 계정이 가장하려는 사용자에 대해 헤더가 제대로 설정되었는지 확인하는 것이 도움이되는 것으로 보입니다 . 이 헤더를 다시 확인했으며 실제로 재 구독 요청과 함께 전송되고 있습니다.

이 문제는 지수 백 오프 솔루션으로 해결하거나 요청이 통과 될 때까지 X 번만 재 시도하여 해결할 수 있습니다. 구독이 "분실"되면 O365 서비스가 Exchange 서버의 DNS를 변경하는 데 시간이 필요한 것 같습니다 (내가 생각할 수있는 유일한 것입니다).

어떤 도움이라도 대단히 감사하겠습니다!


거의 1 년이되었습니다. 이에 대한 해결책을 찾았습니까?
Marcus Höglund

1
공식적인 것은 없지만 문제를 완화하기 위해 일종의 "재시도"전략을 구현했습니다. 불행히도 X-AnchorMailbox헤더를 추가하고 요청 전체에서 Exchange 백엔드 쿠키를 사용한 후에도 문제가 계속 발생 합니다. 초과 근무 (30 초에서 하루 종일)를 고치는 것 같습니다.
jstruzik

3
좋아, 재시도 전략도 구현했습니다. 가장 걱정스러운 점은 때때로이 오류가 발생할 때 내가해야 할 유일한 일은 현재 EWS 서비스에 대한 구독을 다시 만드는 것입니다. 그러나 그것이 작동하지 않을 때 나는 서비스의 새로운 인스턴스를 만들고 그것이 작동하도록 자동 검색을 호출해야합니다. 나는 교환 서버가 무언가를하고 있다고 생각한다 (청소, 재 연결 .. 그냥 추측.) 그리고 그 과정이 오래 걸리면 당신은 이것으로 끝납니다 ..
Marcus Höglund

답변:


3

https://msdn.microsoft.com/en-us/library/office/dn458788(v=exchg.150).aspx 의 설명서가 제공됩니다.

구독이 손실되거나 더 이상 액세스 할 수없는 경우 새 구독을 만들고 새 구독에 이전 워터 마크를 포함하지 않는 것이 가장 좋습니다. 이전 워터 마크로 다시 구독하면 이벤트에 대한 선형 스캔이 발생하여 비용이 많이 듭니다.

대신 새 구독을 만들고 폴더 속성을 비교하여 손실 된 구독과 새 구독 사이에 발생한 콘텐츠 변경 사항을 찾습니다. 확인하도록 권장하는 확장 폴더 속성은 PR_LOCAL_COMMIT_TIME_MAX (0x670a0040)PR_DELETED_COUNT_TOTAL (0x670b0003)입니다.

확장 속성 정의를 만들어이를 수행 할 수 있습니다. 도움이 될 것 같아요 !!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.