HttpNotificationChannel.Find 总是 returns 空

HttpNotificationChannel.Find always returns null

经过一些神奇的转换(我真的很怀念这一刻)我的应用程序现在拒绝按名称查找现有的推送通道。 运行 运行 之后和 运行 HttpNotificationChannel.Find 不断 returns null

这个问题的主要谜团是我的代码(下面列出的)大约是一年前写的,我上次检查时工作正常。

我唯一的假设是 UnbindToShellToast 被意外调用并且推送通道在应用程序终止后被删除。我已经仔细检查了所有内容并从我的代码中删除了任何单个 UnbindToShellToast 调用,它仍然 returns null 每个 运行 .

那么,我的问题是什么?也许我正在为 windows phone 开发?

    _httpChannel = HttpNotificationChannel.Find(ChannelName);

    if (_httpChannel == null)
    {
        _httpChannel = new HttpNotificationChannel(ChannelName);
    }

    _channelUri = Observable.Create<string>(observer =>
    {
        if (_httpChannel != null && _httpChannel.ChannelUri != null && _httpChannel.ChannelUri.OriginalString.IsNotEmpty())
        {
            observer.OnNext(_httpChannel.ChannelUri.OriginalString);
        }
        else
        {
            observer.OnNext(string.Empty);
        }

        return Observable.FromEventPattern<NotificationChannelUriEventArgs>(_httpChannel, "ChannelUriUpdated")
            .Select(i => i.EventArgs.ChannelUri.OriginalString).Subscribe(observer);
    });

    if (_httpChannel.ChannelUri == null)
    {
        try
        {
            _httpChannel.Open();
        }
        catch (Exception ex)
        {
            Debug.WriteLine("PushChannel Open failed: " + ex.Message);
        }
    }

    if (!_httpChannel.IsShellToastBound)
    {
        try
        {
            _httpChannel.BindToShellToast();
        }
        catch (Exception ex)
        {
            Debug.WriteLine("PushChannel BindToShellToast failed: " + ex.Message);
        }
    }

此代码已在 Lumia 1520 (8.10.14234.375) 上测试

这是 Windows Phone 8.1 中的已知模式。由于它在幕后使用 WNS 而不是 MPNS,因此您需要始终在应用启动时请求新的频道 uri。如果您 运行 Windows Phone 8.0 中的相同代码,您将获得预期的行为。