我對Windows Phone 7設備的推送通知服務有疑問: 我現在可以發送推送通知,使用Web應用程序到電話,更改數據的瓷磚。但問題是:當我啓動應用程序時,我需要在調試器輸出中顯示URI,然後將其複製粘貼到Web應用程序中,然後將該MPNS與適用於更新的MPNS聯繫一次一個電話。但我想創建一個可以自動進行多個調用的Web服務,檢索應用程序的URI(在關閉並打開應用程序後發生更改,我認爲),並向其發送推送通知。但我還沒有找到一個MSDN主題來處理這個問題。他們只是使用讚揚,說:「以後需要用URI來替換。」所以我的問題是:如何使用手機將這樣的消息發送給web服務,對其進行響應,然後再次連接到手機,處理此類請求? 還有:我是否需要經過身份驗證的Web服務,還是有調試版本?發送從Windows Phone設備到webservice的推送通知
這是我迄今:
/// <summary>
/// Setup a connection with a webservice, in order to update a shell, either a toast- or a tile shell.
/// </summary>
/// <param name="shellType">The type of shell you wish to update</param>
public void SetupShellChannel (ShellBindType shellType)
{
//holds the push notification that is created. Since we can only have one notification channel open at any one time,
//we will need to check for existance. That is why, the channelName shouldn't be changed
HttpNotificationChannel _httpChannel = HttpNotificationChannel.Find(_channelName);
//if the _httpChannel was not found (read: does not exist)
if (_httpChannel == null)
{
_httpChannel = new HttpNotificationChannel(_channelName );
_httpChannel.Open();
//because there is more than one shelltype we can open, we will use a switch to call the method we seek
BindToShell(_httpChannel, shellType);
}
//Only one push notification service is allowed per application, so we cannot send a tile notification, as well as
//a toast message notification. When we attempt this, we get a InvalidOperationException
else
{
//in this case, the _httpChannel did already exist, but the problem is, we cannot just add the eventHandlers,
//because there is the danger that it didn't exist, and we would get a null pointer exception.
//_httpChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(httpChannel_ChannelUriUpdated);
//_httpChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(httpChannel_ErrorOccurred);
//For testing purposes, we now display the URI to the user, and as output. Normally, we would pass this URI back to the webserver
System.Diagnostics.Debug.WriteLine(_httpChannel.ChannelUri.ToString());
}
//if (_httpChannel.ChannelUri)
//When the URI is updated, we want this to be sent to the server as well, so we know that the adress has changed,
//and don't just send data somewhere into the void. Also, when encountering an error, we want to show the user when
//an error has occured.
_httpChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(HttpChannel_ChannelUriUpdated);
_httpChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(HttpChannel_ErrorOccurred);
}
//here, also we would return the URI to the server, but for debugging purposes, we display them to the user.
void HttpChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e)
{
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString());
MessageBox.Show(String.Format("the URI is {0}", e.ChannelUri.ToString()));
});
}
private void BindToShell(HttpNotificationChannel channel, ShellBindType shellType)
{
switch (shellType)
{
case ShellBindType.BindToShellTile:
channel.BindToShellTile();
break;
case ShellBindType.BindToShellToast:
channel.BindToShellToast();
break;
}
}
void HttpChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e)
{
//getting an error would be caugth here, and then displayed to the user.
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
MessageBox.Show(String.Format("A push notification {0} error occured. {1}{(2)}{3}",
e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData));
});
}
您能否解釋qn的第一部分 - 如何使用手機向web服務發送此類消息,作出響應並再次連接到手機,以處理此類請求。 – whihathac 2012-02-07 21:43:56