EWS API: как получать уведомления по запросу?
Я использую EWS API для подключения и получения почты с сервера Exchange 2007, который работает нормально. Теперь я хотел бы получать уведомления по запросу. Я нашел здесь пример, который я попробовал:
public IEnumerable<ItemEvent> GetPullNotifications(FolderId folderId)
{
PullSubscription subscription = Service.SubscribeToPullNotifications(new FolderId[] { folderId }, 5, null, EventType.NewMail, EventType.Created, EventType.Deleted);
return subscription.GetEvents().ItemEvents;
}
public void CheckPullNotifications(object source, ElapsedEventArgs e)
{
Console.WriteLine("Check...");
IEnumerable<ItemEvent> itemEvents = ewsClient.GetPullNotifications(WellKnownFolderName.Inbox);
foreach (ItemEvent itemEvent in itemEvents)
{
switch (itemEvent.EventType)
{
case EventType.NewMail:
MessageBox.Show("New mail: " + itemEvent.ItemId.UniqueId);
break;
case EventType.Deleted:
MessageBox.Show("Mail deleted: " + itemEvent.ItemId.UniqueId);
break;
}
}
return;
}
//...
Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(CheckPullNotifications);
myTimer.Interval = 1000;
myTimer.Start();
Тем не менее, я никогда не получаю вышеуказанный переключатель, когда ставлю точку останова. Я отправил несколько писем и удалил, ничего не происходит.
Есть идеи, почему это не работает? Или есть какие-то другие способы получения пул-уведомлений?
1 ответ
Решение
Я нашел решение. То, что я сделал выше, это создание новой подписки и мгновенное получение результатов. Вместо этого я должен создать подписку один раз, а затем извлекать результаты время от времени.
Пример:
public void SubscribePullNotifications(FolderId folderId)
{
Subscription = Service.SubscribeToPullNotifications(new FolderId[] { folderId }, 1440, null, EventType.NewMail, EventType.Created, EventType.Deleted);
}
public void GetPullNotifications()
{
IEnumerable<ItemEvent> itemEvents = Subscription.GetEvents().ItemEvents;
foreach (ItemEvent itemEvent in itemEvents)
{
switch (itemEvent.EventType)
{
case EventType.NewMail:
MessageBox.Show("New Mail");
break;
}
}
}
// ...
SubscribePullNotifications(WellKnownFolderName.Inbox);
Timer myTimer = new Timer();
myTimer.Elapsed += new ElapsedEventHandler(GetPullNotifications);
myTimer.Interval = 10000;
myTimer.Start();