Исключение PullNotifcation Exchange Web Services "Водяной знак недействителен"

Я должен смотреть пять календарей параллельно, если появляется какое-либо уведомление. Это работает нормально, но в любое время после нескольких уведомлений или периода времени я получаю это исключение "Водяной знак недействителен". У меня есть список почтовых ящиков, которые я хочу посмотреть (только папка календаря). Триггер запускается каждые несколько секунд, и метод проверяет, есть ли уведомление или нет. Если я создаю несколько встреч и в любое время возникает исключение "Водяной знак недействителен". Он появляется в строке, где я получаю события.

 public Notification(ExchangeService _server1,  string[] _mailboxName1)
        {
            _server = _server1;
            _listOfList = _listOfList1;
            _mailboxName = _mailboxName1;
            foreach (Mailbox m in _mailboxName)
            {
                FolderId _Id = new FolderId(WellKnownFolderName.Calendar, m);
                PullSubscription pullSub = _server.SubscribeToPullNotifications(new FolderId[] { _Id }, 5, null, EventType.Copied, EventType.Created, EventType.Deleted, EventType.Modified, EventType.Moved);
                _subList.Add(pullSub);
            }
            System.Timers.Timer aTimer = new System.Timers.Timer();
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            AppSettingsReader config = new AppSettingsReader();
            int time = Convert.ToInt16(config.GetValue("TimerInterval", typeof(string)));
            aTimer.Interval = time;
            aTimer.Enabled = false;
            aTimer.Start();

        }
     private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        Console.WriteLine("Timer");
        bool noteWatch = false;
        foreach (PullSubscription p in _subList)
        {
            string type = null;
            ItemId eventId = null;
            //Exception the watermark is invalid!! 
            GetEventsResults events = p.GetEvents();

            foreach (ItemEvent itemEvent in events.ItemEvents)
            {

                switch (itemEvent.EventType)
                {
                    case EventType.Created:
                        noteWatch = true;
                        eventId = itemEvent.ItemId;
                        type = "Created";
                        break;
                }
            }
        }
     }

1 ответ

Решение

Я нашел причину: мой список подписки не был потокобезопасным. Я добавил это в мой код, и он отлично работает:

lock (_subList)
                {
                     events = p.GetEvents();
                }
Другие вопросы по тегам