ahl*_*lun 4 exchange-server exchangewebservices
我目前正在使用EWS托管API订阅用户在Exchange 2010服务器上的Pull Notification以获取有关日历项目的通知,并且它正常工作.我是如何做到这一点的,我用SQL数据库中的电子邮件检索了一个用户列表,然后循环遍历每个用户,并使用SubscribeToPullNotifications()然后将每个用户订阅到Pull Notification GetEvents().我订阅了活动Created,Modified并Deleted在文件夹日历上订阅.
我认为这将是从Exchange服务器获取所有通知的其他更好的方法,除了逐个循环每个用户,因为在任何给定的时间,并非所有用户都有通知,只有用户在哪里创建,更新或删除他们的项目MS Outlook中的日历将从Exchange服务器触发事件.
例如,从SQL数据库中检索到200个用户,但只有10个用户在MS Outlook中创建新约会,但由于我正在循环每个用户,因此我需要进行200次循环才能从该10个用户获取10个通知.
有没有办法在任何给定时间立即从Exchange服务器获取所有通知,这样就不需要遍历所有用户以查看Exchange服务器是否有任何事件?我知道也许使用Push或Streaming Notification会更好,但我想知道有没有更好的方法来使用Pull Notification?
谢谢.
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |