推送通道 URI 在设备上显示“无法计算表达式”。在模拟器上完美工作

Push Channel Uri shows "Cannot evaluate expression" on device. Works perfect on the emulator

提问人:Omkar Khair 提问时间:7/14/2012 最后编辑:EranOmkar Khair 更新时间:3/22/2013 访问量:837

问:

我正在尝试在 Windows Phone 上实现基于推送通知的应用程序。我已经能够在模拟器上检索通道 URI,并通过我的服务器向模拟器发送推送通知。

另一方面,我面临着在我的设备上部署相同解决方案的问题。Uri 的用法返回 NullReferenceException。而通道 Uri 显示“无法计算表达式”。

这是我放置在页面构造函数中的代码。 我也尝试过更改_pushChannelName。

private static string _pushChannelName = "TestApp";

    // Constructor
    public MainPage()
    {
        HttpNotificationChannel pushChannel;

        InitializeComponent();

        pushChannel = HttpNotificationChannel.Find(_pushChannelName);

        if (pushChannel == null) 
        {
            MessageBox.Show("NULL");
            pushChannel = new HttpNotificationChannel(_pushChannelName);

            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(pushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(pushChannel_ErrorOccurred);

            pushChannel.ShellToastNotificationReceived +=new EventHandler<NotificationEventArgs>(pushChannel_ShellToastNotificationReceived);

            pushChannel.Open();

            pushChannel.BindToShellToast();
        }
        else
        {

            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(pushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(pushChannel_ErrorOccurred);

            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(pushChannel_ShellToastNotificationReceived);

            //System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
            textBox1.Text = pushChannel.ChannelUri.ToString();

        }

        MessageBox.Show(String.Format("Channel Uri is {0}", pushChannel.ChannelUri.ToString()));
    }

我还尝试从 ChangeUri 事件中检查 Uri。该事件不会在设备上触发,而推送应用工作正常。甚至无法满足通道限制。

private void pushChannel_ChannelUriUpdated(Object sender, NotificationChannelUriEventArgs e)
    {
        Dispatcher.BeginInvoke(() =>
        {

            MessageBox.Show(String.Format("Channel Uri is {0}",
                e.ChannelUri.ToString()));

        });
    }
Windows-Phone-7 推送通知 NullReferenceException MPNS

评论

0赞 Rowland Shaw 7/16/2012
这是否仅在被束缚/在调试器下发生,还是总是发生?
0赞 Omkar Khair 7/17/2012
如果不在调试器下,应用就会崩溃。
0赞 Rowland Shaw 7/17/2012
即使您只尝试读取回调中的 URI?
0赞 Omkar Khair 7/18/2012
回调根本不会触发。
0赞 Rowland Shaw 7/18/2012
如果删除保证其崩溃的代码,则回调将有机会触发。您是否解决了这个问题,并尝试查看回调是否被调用?

答:

1赞 user1551704 10/5/2012 #1

许多用户都面临着这个问题。解决方案有两种。

  1. 第一个解决方案是停止与市场帐户连接的所有应用程序、游戏和其他软件,并删除或停止通知。重新启动手机(关机/开机)并等待 24 小时。

  2. 第二种解决方案是向 Marketplace 付款并注册您的应用程序,从 Marketplace 获取证书并插入到您的应用程序中。然后,当打开新通道时,必须使用静态类“HttpNotificationChannel”的第二个重载构造函数:

    [安全安全关键] public HttpNotificationChannel(字符串 channelName, string serviceName);