提问人:Omkar Khair 提问时间:7/14/2012 最后编辑:EranOmkar Khair 更新时间:3/22/2013 访问量:837
推送通道 URI 在设备上显示“无法计算表达式”。在模拟器上完美工作
Push Channel Uri shows "Cannot evaluate expression" on device. Works perfect on the emulator
问:
我正在尝试在 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()));
});
}
答:
1赞
user1551704
10/5/2012
#1
许多用户都面临着这个问题。解决方案有两种。
第一个解决方案是停止与市场帐户连接的所有应用程序、游戏和其他软件,并删除或停止通知。重新启动手机(关机/开机)并等待 24 小时。
第二种解决方案是向 Marketplace 付款并注册您的应用程序,从 Marketplace 获取证书并插入到您的应用程序中。然后,当打开新通道时,必须使用静态类“HttpNotificationChannel”的第二个重载构造函数:
[安全安全关键] public HttpNotificationChannel(字符串 channelName, string serviceName);
评论