WP7推送通知返回空通道uri

时间:2014-08-22 07:42:38

标签: c# windows-phone-7 service push-notification toast

我在windows phone marketplace中有一个应用程序,我已使用http://msdn.microsoft.com/

中的代码设置推送通知
public MainPage()
    {
        /// Holds the push channel that is created or found.
        HttpNotificationChannel pushChannel;

        // The name of our push channel.
        string channelName = "ToastSampleChannel";

        InitializeComponent();

        // Try to find the push channel.
        pushChannel = HttpNotificationChannel.Find(channelName);

        // If the channel was not found, then create a new connection to the push service.
        if (pushChannel == null)
        {
            pushChannel = new HttpNotificationChannel(channelName);

            // Register for all the events before attempting to open the channel.
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

            // Register for this notification only if you need to receive the notifications while your application is running.
            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

            pushChannel.Open();

            // Bind this new channel for toast events.
            pushChannel.BindToShellToast();

        }
        else
        {
            // The channel was already open, so just register for all the events.
            pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated);
            pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred);

            // Register for this notification only if you need to receive the notifications while your application is running.
            pushChannel.ShellToastNotificationReceived += new EventHandler<NotificationEventArgs>(PushChannel_ShellToastNotificationReceived);

            // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point.
            System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString());
            MessageBox.Show(String.Format("Channel Uri is {0}",
                pushChannel.ChannelUri.ToString()));

        }
    }

有一段时间代码返回了uri,但是2-3个月后返回null因为pushChannel.ChannelUriUpdated从未触发过! 我可以做些什么来解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您还需要检查pushChannel.ChannelUri是否为null,以及是否创建新频道。

以下是pushChannel != null的代码,在您的情况下,它会进入else子句:

if (pushChannel.ChannelUri != null)
{
    // This is raising my event to signal any subscribers
    // that an new channelUri is available
    RaiseGotPushUri(pushChannel.ChannelUri);

    // Re-register the event handlers
    pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated;
    pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived;
    pushChannel.ErrorOccurred += PushChannel_ErrorOccurred;
}
else
{
    // If we never got the Uri back, unbind and reset everything...
    // Dispose of the old channel
    pushChannel.ChannelUriUpdated -= PushChannel_ChannelUriUpdated;
    pushChannel.ShellToastNotificationReceived -= PushChannel_ShellToastNotificationReceived;
    pushChannel.ErrorOccurred -= PushChannel_ErrorOccurred;

    if (pushChannel.IsShellToastBound) pushChannel.UnbindToShellToast();
    pushChannel.Close();
    pushChannel.Dispose();

    // ... and re-register the event handlers
    pushChannel = new HttpNotificationChannel(channelName);//, _serviceName);
    pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated;
    pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived;
    pushChannel.ErrorOccurred += PushChannel_ErrorOccurred;

    // Ask for a new Uri
    pushChannel.Open();
    // Set the HttpNotificationChannel to handle the appropriate push notifications
    pushChannel.BindToShellToast();
}
相关问题