2012-02-20 2 views
4

현재 EWS Managed API를 사용하여 Exchange 2010 서버에서 Pull Notification에 가입하여 일정 항목에 대한 알림을 구독하고 있어도 정상적으로 작동합니다. 내가 이것을 어떻게했는지는 SQL 데이터베이스에서 전자 메일을 보낸 사용자 목록을 검색 한 다음 각각을 반복하고 각자를 SubscribeToPullNotifications() 및 그 다음에 GetEvents()을 사용하여 Pull Notification에 알리는 것입니다. 캘린더 폴더의 Created, ModifiedDeleted 이벤트를 구독합니다.EWS를 사용하여 Exchange 2010 서버에서 모든 알림을 즉시 받음

나는 언제나 모든 사용자가 알림을 가지지 않기 때문에 모든 사용자를 하나씩 반복하는 것 외에 Exchange 서버의 모든 알림을 얻는 더 좋은 방법이 될 것이라고 생각합니다. MS Outlook에서 캘린더의 항목을 삭제하면 Exchange 서버에서 이벤트가 발생합니다.

예를 들어 SQL 데이터베이스에서 200 명의 사용자가 검색되지만 MS Outlook에서 새 약속을 만드는 사용자는 10 명뿐입니다. 그러나 각 사용자를 반복하므로 200 개의 루핑을 통해 10 개의 알림을 가져와야합니다. 그 10 명의 사용자.

Exchange 서버의 이벤트가 있는지 여부를보기 위해 모든 사용자를 반복 할 필요가 없도록 Exchange 서버에서 모든 알림을 한 번에 가져 오는 방법이 있습니까? 푸시 알림이나 스트리밍 알림을 사용하는 것이 더 나을지도 모르지만 당겨 받기 알림을 사용하여 더 좋은 방법을 알고 싶습니다.

감사합니다.

답변

5

EWS 구독은 하나의 사서함에 묶여 있습니다. 아직 여러 매장에서 구독 할 수 없습니다 (은 Exchange 2010에서 테스트 됨).

당신은 당신이에 가입하고자하는 모든 사서함 폴더에 대한 IEnumerable<FolderId> 전달 SubscribeToPullNotifications()를 사용하여 사서함 (받은 편지함, 보낸 편지함 등) 내에서 여러 폴더에 가입 할 수 있습니다.

모든 사용자 사서함에 대한 액세스 권한이있는 대리인 계정을 사용해야합니다. 이미 가지고있는 것처럼 들립니다.

FolderId folder1 = new FolderId(WellKnownFolderName.Calendar, new Mailbox("[email protected]")); 
FolderId folder2 = new FolderId(WellKnownFolderName.Calendar, new Mailbox("[email protected]")); 
var folderIds1 = new FolderId[] { folder1 }; 
var folderIds2 = new FolderId[] { folder2 }; 
var trackedEvents = new EventType[] { EventType.Deleted, EventType.Created, EventType.Modified } 

PullSubscription subscription1 = service.SubscribeToPullNotifications(folderIds1,10,null,trackedEvents); 
PullSubscription subscription2 = service.SubscribeToPullNotifications(folderIds2,10,null,trackedEvents); 

// call subscrition.GetEvents() to retrieve new entries 
GetEventsResults subEvents1 = subscription1.GetEvents(); 
GetEventsResults subEvents2 = subscription2.GetEvents(); 
+1

즉, 나중에 모든 이벤트를 한 번에 가져 오려면 subscription.GetEvents()를 사용할 수 있습니다. 나는 이것이 좋은 것이라고 생각한다. 나는 그것을 시도 할 것이다. – ahlun

+1

이것은 불행하지 않습니다. 다음 설명과 함께 Microsoft.Exchange.WebServices.Data.ServiceResponseException을 발생시킵니다. "구독은 단일 공용 폴더 또는 단일 사서함의 폴더에서만 설정할 수 있습니다." – Kingsley

+1

@docflabby - 시도해 주셔서 감사합니다! 그것은 EWS 구독의 한계로 보입니다. 정확히 같은 오류가 발생합니다. 모니터링하려는 각 사서함에 대해 별도의 구독이 필요하며 각각에 대해 subscription.GetEvents()를 호출하십시오. 이를 반영하여 답변을 업데이트하겠습니다. – SliverNinja

관련 문제