2011-10-26 8 views
0

通知が表示される場合、5つのカレンダーを並行して監視する必要があります。それはうまく動作しますが、いくつかの通知や一定期間が経過した後は、いつでもこの例外が発生します。「ウォーターマークが無効です。 私は見たいメールボックスのリストを持っています(カレンダーフォルダのみ)。トリガーは数秒ごとに開始され、メソッドは通知があるかどうかを調べます。 いくつかの予定を作成し、いつでも「ウォーターマークが無効です」という例外がスローされました。私はイベントを取得する行に表示されます。PullNotifcation Exchange Webサービス「ウォーターマークが無効です」例外

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; 
       } 
      } 
     } 
    } 

答えて

2

理由を確認しました: マイ・リストの購読はスレッドセーフではありませんでした。 これを私のコードに追加しても問題ありません。

lock (_subList) 
       { 
        events = p.GetEvents(); 
       } 
関連する問題