API de EWS: error al recrear las suscripciones de notificación

81

Al trabajar con suscripciones de extracción a carpetas de calendario de Office365, recibí muchos ErrorReadEventsFailedmensajes en la SendNotificationsolicitud. Este error esencialmente significa que la suscripción ya no se puede encontrar y el servidor ya no debería esperar nuevas notificaciones.

Al verificar el manejo de errores recomendado por Microsoft , la solución es usar Detección automática para redescubrir ExternalEwsUrl o EwsPartnerUrl y crear una nueva suscripción.

Con Office365, el servicio AutoDiscovery parece casi imposible con una combinación de cuentas de servicio OAuth2, por lo que lo he estado usando https://outlook.office365.com/EWS/Exchange.asmxcomo el punto final principal de EWS.

Sin embargo, cuando intento crear una nueva suscripción para la carpeta de calendario específica, sigo recibiendo un 500 ErrorNoRespondingCASInDestinationSiteerror genérico :

Los servicios web de Exchange no están disponibles actualmente para esta solicitud porque ninguno de los servidores de acceso de cliente en el sitio de destino pudo procesar la solicitud.

Lo extraño es que esto solo sucede directamente después de recibir el ErrorReadEventsFailederror inicial . Si lo intento de nuevo en, digamos, 30 segundos, la solicitud se procesa sin problemas.

Después de investigar un poco, pareció que a la mayoría de los usuarios les resultó útil asegurarse de que el X-AnchorMailboxencabezado estaba configurado correctamente para el usuario que la cuenta de servicio desea suplantar. Verifiqué dos veces este encabezado y, de hecho, se está enviando junto con la solicitud para volver a suscribirse.

Este problema puede resolverse mediante una solución de retroceso exponencial, o simplemente volviendo a intentar X cantidad de veces hasta que se complete la solicitud. Me parece que cuando la suscripción se "pierde", el servicio O365 necesita tiempo para cambiar el DNS del servidor Exchange (es lo único que se me ocurre).

¡Cualquier ayuda será muy apreciada!

jstruzik
fuente
Casi un año, ¿has encontrado una solución para esto?
Marcus Höglund
1
Nada oficial, pero he implementado una especie de estrategia de "reintento" para intentar mitigar el problema. Desafortunadamente, el problema persiste incluso después de agregar el X-AnchorMailboxencabezado y usar la cookie de backend de Exchange en las solicitudes. Parece que se arregla solo con el tiempo (entre 30 segundos y un día completo).
jstruzik
3
Ok, también implementé una estrategia de reintento. Lo más inquietante es que, a veces, cuando se produce este error, lo único que tengo que hacer es volver a crear una suscripción al servicio EWS actual. Pero cuando eso no funciona, necesito crear un nuevo instans del servicio y llamar a la detección automática para que funcione. Creo que el servidor de Exchange está haciendo algo (limpieza, vuelve a conectar .just adivinar.) Y si ese proceso se lleva a tiempo terminar con esta ..
Marcus Höglund

Respuestas:

3

Dada la documentación en: https://msdn.microsoft.com/en-us/library/office/dn458788(v=exchg.150).aspx

Cuando se pierde una suscripción o ya no se puede acceder a ella, es mejor crear una nueva suscripción y no incluir la marca de agua anterior en la nueva suscripción. Volver a suscribirse con la antigua marca de agua provoca un escaneo lineal de eventos, lo cual es costoso.

En su lugar, cree una nueva suscripción y compare las propiedades de la carpeta para buscar cambios de contenido que ocurrieron entre la suscripción perdida y la nueva suscripción. Las propiedades de carpeta extendida que le recomendamos que compruebe son PR_LOCAL_COMMIT_TIME_MAX (0x670a0040)y PR_DELETED_COUNT_TOTAL (0x670b0003).

Puede hacer esto creando una definición de propiedad extendida. ¡Creo que esto puede ayudarte!

Manoj S
fuente