2011-07-06 80 views
0

我必須在我的項目中實現推送通知。 它有發件人(Windows Phone窗口應用程序),wcf服務和客戶端(Windows Phone應用程序)。在windows phone 7中建立推送通知

如何更換髮件人並使用我的網址發送和接收來自客戶端的通知?

我希望發件人是仿真器本身的一些應用程序,它與客戶端並行運行並將數據連續推送到客戶端。

如何開發這樣的應用程序

任何人都可以這樣說。

+0

對不起,我不關注你的意思。請澄清你的問題。此外,通知是單向的,所以你不能用它們「發送和接收來自客戶端的通知」 – ZombieSheep

+0

我現在編輯的問題你明白嗎? – curiosity

回答

1

聽起來好像您正在使用兩個WP7應用程序使用推送通知功能來回發送消息。那是對的嗎?

我的理解是,您仍然需要每個設備使用訂閱成功時發回的唯一URI來訂閱推送通知服務(MS託管)。看來SL3/4可以創建HttpWebRequest對象,因此應該能夠制定一個正確的包發送,但是,我看到它會是如何獲得您想要發送該文件的設備的URI的難度。通常情況下,發送給訂閱者,訂閱者在訂閱階段返回該訂閱者的URI。

我的WCF託管代碼只有在WCF知道設備的URI,當WCF方法被調用它發送的工作原理:

public bool sendTileUpdate(string tileText, string url, string image) 
    { 
     string TilePushXML = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + 
       "<wp:Notification xmlns:wp=\"WPNotification\">" + 
       "<wp:Tile>" + 
       "<wp:BackgroundImage>{2}</wp:BackgroundImage>" + 
       "<wp:Count>{0}</wp:Count>" + 
       "<wp:Title>{1}</wp:Title>" + 
       "</wp:Tile>" + 
       "</wp:Notification>"; 

     try 
     { 
      HttpWebRequest sendNotificationRequest = (HttpWebRequest)WebRequest.Create(url); 
      sendNotificationRequest.Method = "POST"; 
      sendNotificationRequest.Headers = new WebHeaderCollection(); 
      sendNotificationRequest.ContentType = "text/xml"; 

      // Tile 
      sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "token"); 
      sendNotificationRequest.Headers.Add("X-NotificationClass", "1"); 

      string str = string.Format(TilePushXML, "", tileText, image); 

      byte[] strBytes = new UTF8Encoding().GetBytes(str); 
      sendNotificationRequest.ContentLength = strBytes.Length; 
      using (Stream requestStream = sendNotificationRequest.GetRequestStream()) 
      { 
       requestStream.Write(strBytes, 0, strBytes.Length); 
      } 
      HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse(); 
      string notificationStatus = response.Headers["X-NotificationStatus"]; 
      string deviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; 
      return true; 
     } 
     catch (Exception e) 
     { 
      return false; 
     } 
    } 

我知道這是一個TileNotification,但原理是一樣的。

據我所知,芒果(WP7.1 & SL4)將支持sockets,這可能是一個更適合您的設備溝通的方式!

祝你好運,

傑森。

相關問題