Исключение 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();
}