Получение всех уведомлений с сервера Exchange 2010 одновременно с помощью EWS - PullRequest
4 голосов
/ 20 февраля 2012

В настоящее время я использую управляемый API EWS для подписки пользователей на Pull Notification на сервере Exchange 2010 для получения уведомлений об элементах календаря, и он работает нормально. Как я это сделал, я извлек список пользователей с их электронной почтой из базы данных SQL, а затем перебрал каждого из них и назначил каждому из них Pull Notification, используя SubscribeToPullNotifications(), а затем GetEvents(). Я подписываюсь на события Created, Modified и Deleted в папке Календарь.

Я думаю, что это будет другой лучший способ получить все уведомления от сервера Exchange, кроме зацикливания каждого пользователя по одному, потому что в любой момент времени не все пользователи имеют уведомления, только пользователь, где они создают, обновляют или удаляют элементы в их календаре в MS Outlook будут вызывать событие с сервера Exchange.

Например, 200 пользователей извлекаются из базы данных SQL, но только 10 из них создают новые встречи в MS Outlook, но поскольку я зацикливаю каждого из них, мне нужно 200 зацикливаний, чтобы получить 10 уведомлений от этого 10 пользователей.

Есть ли способ получать все уведомления от сервера Exchange одновременно в любое время, чтобы не было необходимости циклически перебирать всех пользователей, чтобы узнать, происходит ли какое-либо событие с сервера Exchange? Я знаю, может быть, было бы лучше использовать Push или Streaming Notification, но я хотел бы знать, есть ли лучший способ сделать это с помощью Pull Notification?

Спасибо.

1 Ответ

5 голосов
/ 21 февраля 2012

Подписка EWS привязана к одному почтовому ящику - вы еще не можете подписаться на несколько магазинов ( протестировано на Exchange 2010 ).

Вы можете подписаться на несколько папок в почтовом ящикеиспользуя SubscribeToPullNotifications(), передав IEnumerable<FolderId> для всех папок почтовых ящиков ( Входящие, Отправленные и т. д. ), на которые вы хотите подписаться.

Вам нужно будет использовать учетную запись делегата, которая имеет доступ ко всем почтовым ящикам пользователей - что, похоже, у вас уже есть.

FolderId folder1 = new FolderId(WellKnownFolderName.Calendar, new Mailbox("email@email.com")); 
FolderId folder2 = new FolderId(WellKnownFolderName.Calendar, new Mailbox("email2@email.com")); 
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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...