2012-02-20 7 views
4

現在、EWS Managed APIを使用して、Exchange 2010サーバのPull Notificationにユーザを登録してカレンダーアイテムの通知を取得しています。私はこれをどのようにしたのですか?SQLデータベースから電子メールを受信したユーザのリストを取得し、それぞれをループして、SubscribeToPullNotifications()、次にGetEvents()を使用してそれぞれをPull Notificationにサブクラス化します。 CalendarのフォルダにあるCreatedModifiedDeletedというイベントを購読します。EWSを使用してExchange 2010サーバから一斉にすべての通知を取得

いつでもすべてのユーザーが通知を受け取るわけではないので、Exchangeサーバーからのすべての通知をすべてのユーザーに1つずつループさせる以外にも良い方法だと思っています。 MS Outlookのカレンダー内のアイテムを削除すると、Exchangeサーバーからイベントが発生します。

たとえば、200人のユーザーがSQLデータベースから取得しましたが、そのうち10人だけがMS Outlookで新しい予定を作成していますが、それぞれをループしているため、10回の通知を得るには200回ループする必要がありますその10人のユーザー。

Exchangeサーバーからのイベントがあるかどうかを確認するために、すべてのユーザーをループする必要がないように、一度にExchangeサーバーからすべての通知を取得する方法はありますか?プッシュまたはストリーミング通知を使用するほうが良いかもしれないが、プル通知を使用してこれを行うより良い方法があることを知りたいと思いますか?

ありがとうございました。

答えて

5

EWSサブスクリプションは1つのメールボックスに限定されています。複数のストアにはまだサブスクライブできません(は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

関連する問題