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 中的相同代码,您将获得预期的行为。
经过一些神奇的转换(我真的很怀念这一刻)我的应用程序现在拒绝按名称查找现有的推送通道。 运行 运行 之后和 运行 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 中的相同代码,您将获得预期的行为。