程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> 如何創建Exchange的Push訂閱

如何創建Exchange的Push訂閱

編輯:關於C#
 

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);      
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved