1. 前言
Exchange提供了兩種通知機制:pull機制和push機制。Pull 訂閱易於使用(EWS API 提供了相應的實現)但是無法實時獲取用戶的信息,需要不斷輪詢去獲取;Push訂閱可以實時獲取用戶的信息,且不需要輪詢,但是EWS API沒有提供具體的實現,如果要使用的話需要自行編寫監聽程序,本文主要介紹了監聽程序的編寫過程。
2. 創建監聽程序
1)創建HTTPListener
新建一個HttpListener對象,確定要監聽的地址“http://192.168.21.8:80/P ushSubscription /”,然後開始監聽,並檢索異步傳入的信息,需要注意的是監聽的端口一定要是訂閱程序可以訪問的。
_Listener = new HttpListener();
_Listener.Prefixes.Add(“http://192.168.21.8:80/PushSubscription/”);
_Listener.Start();
_Listener.BeginGetContext(new AsyncCallback(ListenerCallback), _Listener);
2)讀取異步返回的信息
新建一個StreamReader對象,讀取異步返回的字節流。
HttpListener listener = (HttpListener)result.AsyncState;
HttpListenerContext context = listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
string sRequest = "";
using (StreamReader reader = new StreamReader(request.InputStream))
{
sRequest = reader.ReadToEnd();
_Requests.Add(sRequest);
}
3)處理返回信息
首先要判斷返回的信息是否來自Exchange訂閱,如果是的話從返回的XML數據中提取相關信息處理即可。
if (Request.Contains("exchange") &&Request.Contains("SendNotificationResp onseMessage"))
{
XmlDocument oNotifications = new XmlDocument();
Notifications.LoadXml(Requests);
XmlNodeListnodeList Notifications = oNotifications. GetElementsByTagName ("Notification", m);
}
3. 創建Push訂閱
首先創建一個ExchangeService並初始化,然後將剛才監聽的地址“http://192.168. 21.8:80/ PushSubscription /”作為推送服務斷點發起Push訂閱。
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
service.Credentials = new WebCredentials(SysConfig.ExcUserName, SysConfig.ExcPassword, SysConfig.Domain);
service.Url = new Uri(SysConfig.EmailServer);
string url=”http://192.168. 21.8:80/ PushSubscription /”
service.SubscribeToPushNotifications(new List<FolderId>() { id }, url, 30, waterMark, EventType.Created);