Estoy usando el SDK de servicios web de Microsoft Exchange 1.1 y el uso de la conexión de transmisión para suscribirme a notificaciones de correo nuevo. Todo funciona bien para recibir las notificaciones, pero recibo errores de vez en cuando sobre que mi Exchange no puede encontrar mi suscripción.¿A dónde va mi suscripción de transmisión?
A continuación se muestra el código que estoy utilizando para inicializar mi suscripción y los eventos que uso.
public void Subscribe()
{
var locateMailbox = new Mailbox
{
Address = "myemail"
};
var folderId = new FolderId(WellKnownFolderName.Inbox, locateMailbox);
var foldersToWatch = new[] {folderId};
StreamingSubscription streamingSubscription =
_exchangeService.SubscribeToStreamingNotifications(foldersToWatch, EventType.NewMail);
// Timeout is set at 1 minute intentionally
var streamingConnection = new StreamingSubscriptionConnection(_exchangeService, 1);
streamingConnection.AddSubscription(streamingSubscription);
streamingConnection.OnSubscriptionError += ResolveError;
streamingConnection.OnDisconnect += Reconnect;
streamingConnection.Open();
}
public void Reconnect(object sender, SubscriptionErrorEventArgs disconnectEventArgs)
{
if (!((StreamingSubscriptionConnection)sender).IsOpen)
((StreamingSubscriptionConnection)sender).Open();
}
public void ResolveError(object sender, SubscriptionErrorEventArgs errorEventArgs)
{
var streamingSubscriptionConnection =
(StreamingSubscriptionConnection) sender;
if (!streamingSubscriptionConnection.IsOpen)
streamingSubscriptionConnection.Open();
}
ServiceLocalException - You must add at least one subscription to this connection before it can be opened.
Esa excepción habla por sí mismo y estoy consciente de que simplemente puedo crear otra suscripción interior de Reconnect()
. Espero que alguien me ayude a comprender a dónde va la suscripción. No puedo imaginarme que un producto como Exchange 2010 simplemente pierda mi suscripción. Además, no puedo señalar el error. A veces puedo mantener mi suscripción activa durante 10 minutos y otras veces recibo un error acerca de que mi suscripción no es válida después de 2 o 3 minutos.
Por lo que vale, estoy usando Exchange 2010 SP1.
Hice como usted sugirió y el código de error que consigo es 'ErrorSubscriptionNotFound'. No estoy seguro de por qué porque si profundizo en el argumento 'remitente' puedo ver que hay una suscripción allí. – Mike
El código de error es el error que vino del servidor. Cuando desgloses y ves que la suscripción todavía está allí, estás en el cliente. Es el servidor que no puede encontrar la suscripción. Supongo que el servidor descartó la suscripción después de un minuto aproximadamente porque solo le dio un tiempo de espera de un minuto. Intente un tiempo de espera más largo y vea si el problema todavía ocurre. ¿Por qué intencionalmente usó un tiempo de espera de un minuto de todos modos? –
Establecí el tiempo de espera en un minuto porque recibía el mismo error con un tiempo de espera de 30 minutos. En lugar de esperar varios conjuntos de 30 minutos para encontrar el error, quería ver los errores más rápido. Pero ahora que lo pienso, debería seguir codificando a la defensiva para asegurarme de mantener una suscripción activa en todo momento. Nunca se sabe cuando el servidor tendrá un tropiezo. Gracias. – Mike