2013-04-23 4 views
0

Exchange 2007 서버에서 메일을 연결하고 검색하는 데는 EWS API을 사용하고 있습니다. 정상적으로 작동합니다. 이제 알림을 받고 싶습니다. 내가 시도 무엇 이는 예를 here을 발견 : 내가 거기에 중단 점을 넣을 때EWS API : 알림을 가져 오는 방법은 무엇입니까?

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(); 

그러나, 나는 위의 스위치에 도착하지 않았다. 나는 약간 우편물을 보내고 몇몇을 삭제했다, 아무 일도 일어나지 않는다.

이것이 작동하지 않는 이유는 무엇입니까? 또는 끌어 오기 알림을 가져 오는 다른 방법이 있습니까?

답변

0

해결책을 찾았습니다. 위에서 한 것은 새로운 구독을 만들고 즉시 결과를 얻으려고하는 것입니다. 대신 구독을 한 번 생성 한 다음 결과를 매번 가져와야합니다.

예 :

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(); 
+0

가 구독 범위 밖에 정의? –

관련 문제