Я создал небольшое приложение, которое просматривает папку "Входящие" с помощью управляемой DLL EWS.
Когда я создаю StreamingSubscriptionConnection
, я прохожу 1-минутное отключение.
Затем в обработчике событий при отключении я сплю 45 секунд и снова подключаюсь.
Если что-то отправляется в папку «Входящие» в течение 45-секундного периода сна, изначально это выглядело так, как будто оно проснулось и правильно запустило NotificationEventDelegate
. Однако после некоторого тестирования кажется, что он запускает его несколько раз для одного и того же электронного письма, когда приходит более одного электронного письма.
Если я не сплю, то у меня нет этой проблемы. Итак, мои вопросы: почему NotificationEventDelegate
не работает должным образом при повторном подключении, и есть ли проблема с немедленным повторным подключением?
мой код выглядит следующим образом,
private MailDirectorServer()
{
_isRunning = false;
ExchangeService _service = new ExchangeService()
{
Credentials = new WebCredentials(userName, password),
Url = new Uri(uriAddress)
};
_connection =
new StreamingSubscriptionConnection(_service, 1);
// set up subscriptions here.
_connection.OnNotificationEvent +=
new StreamingSubscriptionConnection.NotificationEventDelegate(OnNewMail);
_connection.OnDisconnect +=
new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnDisconnect);
_connection.Open();
_isRunning = true;
}
private void OnDisconnect(object sender, SubscriptionErrorEventArgs args)
{
while (true)
{
if (_isRunning)
{
//_logger.Debug("Sleeping for 45 seconds");
//Thread.Sleep(new TimeSpan(0, 0, 45));
_connection.Open();
_logger.Info("Connection Re Opened");
break;
}
else
{
_logger.Info("Closing Down");
break;
}
}
}