C# windows phone 8获取URI的推送通知

C# windows phone 8获取URI的推送通知,c#,windows-phone-8,mpns,C#,Windows Phone 8,Mpns,我开发了WindowsPhone8应用程序,并在其中实现了推送通知服务。 当我在windows Phone Emulator中启动应用程序时,它会创建URI(从MPNS获取)并将其发送到数据库,以便下次发送通知,但问题是,当我重新启动我的Emulator时,URI会发生更改,我希望为设备或Emulator保留相同的URI,因此如何才能做到这一点 我生成URI的代码是 HttpNotificationChannel pushChannel; string channelName =

我开发了WindowsPhone8应用程序,并在其中实现了推送通知服务。 当我在windows Phone Emulator中启动应用程序时,它会创建URI(从MPNS获取)并将其发送到数据库,以便下次发送通知,但问题是,当我重新启动我的Emulator时,URI会发生更改,我希望为设备或Emulator保留相同的URI,因此如何才能做到这一点

我生成URI的代码是

HttpNotificationChannel pushChannel;
        string channelName = "TileSampleChannel";
        InitializeComponent();
        pushChannel = HttpNotificationChannel.Find(channelName);
        if (pushChannel == null)
        {
            pushChannel = new HttpNotificationChannel(channelName);
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
            pushChannel.Open();
            pushChannel.BindToShellTile();
        }
        else
        {
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);
            //System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
           // MessageBox.Show(String.Format("Channel Uri is {0}", pushChannel.ChannelUri.ToString()));
            string strURI = pushChannel.ChannelUri.ToString();
            (App.Current as App).phoneURI = strURI;
        }
HttpNotificationChannel推送通道;
字符串channelName=“TileSampleChannel”;
初始化组件();
pushChannel=HttpNotificationChannel.Find(channelName);
if(pushChannel==null)
{
pushChannel=新的HttpNotificationChannel(通道名称);
pushChannel.ChannelUriUpdated+=新事件处理程序(pushChannel\u ChannelUriUpdated);
pushChannel.ErrorOccursed+=新的事件处理程序(pushChannel\u ErrorOccursed);
pushChannel.Open();
pushChannel.BindToShellTile();
}
其他的
{
pushChannel.ChannelUriUpdated+=新事件处理程序(pushChannel\u ChannelUriUpdated);
pushChannel.ErrorOccursed+=新的事件处理程序(pushChannel\u ErrorOccursed);
//System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
//Show(String.Format(“通道Uri为{0}”,pushChannel.ChannelUri.ToString());
字符串strURI=pushChannel.ChannelUri.ToString();
(App.Current作为App.phoneURI=strURI;
}
我选择了这个(App.Current作为App)。phoneURI并发送到数据库,但当我重新启动emulator时,它得到了更改

有时它给出URI,有时抛出异常类型为“System.NullReferenceException”的异常发生在TileNotificationClient.DLL中,但未在用户代码中处理,这一行
string strURI=pushChannel.ChannelUri.ToString()

仿真器(imho)好的一面是,每次重新启动它时,您都有一个全新、干净的系统


通知uri也不能保证在实际设备上保持一致。您应该在应用程序设计中加入不断变化的频道URI。

关于您的NullReferenceException:您可以检查您的频道实际上是否有频道URI吗?不确定,但如果它没有完全打开,有时它还没有通道uri。