동적 사용자의 Push Notification 등록


목차
  1. 파워쉘로 사용자 정보 알아내기
  2. Push Notification 등록 요청


 이전 포스트에서 파워쉘로 Active 사용자를 알아 내는 방법을 살펴 보았다. ( 2013/05/03 - [기타] - [Exchange] 동적 사용자의 Push Notification 등록 #1 ) 이제 이번 포스트에서는 Push Notification을 신청하도록 하자.


아래 '코드1'을 통해 Active mode의 Database에서 사용자를 가져와 Push Notification을 요청하는 코드이다.

/// <summary> /// Active Database를 이용해서 사용자 알아 내기 /// </summary> private static void RequestDatabase() {     // 요청자 사용자 리스트     var requestList = new List<string>();     // 요청된 사용자의 SubscriptionId 리스트     var subscriptionIdList = new ConcurrentDictionary<stringstring>();     // Task 리스트     var taskList = new List<System.Threading.Tasks.Task>();     // 파워쉘 명령으로 알아 내기     using (var powershellInvoker = new ExchangePowerShellWrapper(new AppConfigExchangePowerShellConfig()))     {         // 파워쉘 실행         foreach (var databaseItem in powershellInvoker.PipelineScriptInvoke("Get-MailboxDatabaseCopyStatus -active | select-object DatabaseName"))         {             // DatabaseName을 추출한다.             var databaseName = databaseItem.Members["DatabaseName"].Value.ToString();             // Get-Mailbox 파워쉘을 실행하여 사용자의 WindowsEmailAddress를 알아 낸다.             foreach (var user in powershellInvoker.PipelineScriptInvoke("Get-Mailbox -Database \"" + databaseName + "\" | select-object WindowsEmailAddress"))             {                 // 사용자의 이메일 주소                 var windowsEmailAddress = user.Members["WindowsEmailAddress"].Value.ToString();                 var databaseNameTemp = databaseName;                 var temp = System.Threading.Tasks.Task.Factory.StartNew(() =>                 {                     //GetRequest(databaseNameTemp, windowsEmailAddress);                     // List에 관리가 되도록 추가 한다.                     subscriptionIdList.TryAdd(GetRequestNotification(windowsEmailAddress), windowsEmailAddress);                 });                 // waiting 하기 위해 리스트에 넣어 둔다.                 taskList.Add(temp);             }         }     }     // 작업이 완료 될 때까지 대기 하도록 한다.     System.Threading.Tasks.Task.WaitAll(taskList.ToArray()); } /// <summary> /// 웹 서비스로 Subscription 신청 /// </summary> /// <param name="smtpAddress">메일 주소</param> private static string GetRequestNotification(string smtpAddress) {     try     {         string subscriptionId = null;         PushSubscription pushSubscription = null;         var ewsService = new ExchangeService(Microsoft.Exchange.WebServices.Data.ExchangeVersion.Exchange2013)         {             // 인증 정보 세팅             Credentials = new NetworkCredential("domain\\id""password")         };         // 이벤트 종류         var events = new List<EventType>() { EventType.CreatedEventType.Deleted };         // 폴더 범위         var folders = new List<FolderId>() { new FolderId(WellKnownFolderName.Inbox) };         pushSubscription = ewsService.SubscribeToPushNotifications(folders.ToArray(),                                                     new Uri("https://owa.mail.com/ews/exchange.asmx"),                                                     1,                                                     null,                                                     events.ToArray());         // Push Notification 요청하면 관리가 되도록 uniqueId를 반환한다.         subscriptionId = pushSubscription.Id;         return subscriptionId;     }     catch (Exception ex)     {         Console.WriteLine("{0}, {1}, {2}"smtpAddressex.Messagecount++);         throw;     } }

[코드1] Active mode database 사용자 추가


  RequestDatabase() 함수에서는 Database에서 사용자 정보를 추출하고, GetRequestNotification() 함수에서는 Exchange에 Push Notification 요청한다.






+ Recent posts