Windows phone 7 活动磁砖通道推送错误“;MessageBadContent";
我正在使用手机将实时互动程序更新推送到自身,但我收到了以下错误: {Microsoft.Phone.Notification.NotificationChannelErrorEventArgs} “MessageBadContent” 错误代码=-21295899 我有一种感觉,这是因为我正在为互动程序发送的Uri中的URL太长了 还有其他人有这个问题吗 发送更新的代码:Windows phone 7 活动磁砖通道推送错误“;MessageBadContent";,windows-phone-7,Windows Phone 7,我正在使用手机将实时互动程序更新推送到自身,但我收到了以下错误: {Microsoft.Phone.Notification.NotificationChannelErrorEventArgs} “MessageBadContent” 错误代码=-21295899 我有一种感觉,这是因为我正在为互动程序发送的Uri中的URL太长了 还有其他人有这个问题吗 发送更新的代码: HttpNotificationChannel channel = HttpNotificationChannel.Find
HttpNotificationChannel channel = HttpNotificationChannel.Find("OneTime");
if (channel != null)
channel.Close();
else
{
channel = new HttpNotificationChannel("OneTime");
channel.ChannelUriUpdated +=
(s, e) =>
{
if (imageUri.IsAbsoluteUri)
{
channel.BindToShellTile(new Collection<Uri> {new Uri("http://mydomain.com") });
}
else
channel.BindToShellTile();
SendTile(e.ChannelUri, imageUri.ToString(), 0, " ",
() =>
{
//Give it some time to let the update propagate
Thread.Sleep(
TimeSpan.FromSeconds(10));
channel.UnbindToShellTile();
channel.Close();
//Do the operation
if (onComplete != null)
onComplete();
}
);
};
channel.Open();
}
}
HttpNotificationChannel=HttpNotificationChannel.Find(“一次性”);
如果(通道!=null)
channel.Close();
其他的
{
通道=新的HttpNotificationChannel(“一次性”);
channel.ChannelUri已更新+=
(s,e)=>
{
if(imageUri.IsAbsoluteUri)
{
channel.BindToShellTile(新集合{新Uri(“http://mydomain.com") });
}
其他的
channel.BindToShellTile();
SendTile(例如ChannelUri、imageUri.ToString(),0,“,
() =>
{
//给它一些时间让更新传播
线,睡觉(
时间跨度从秒(10)开始;
channel.unbindtoselltile();
channel.Close();
//做手术
如果(onComplete!=null)
onComplete();
}
);
};
通道打开();
}
}
我发送的包中的XML是:
<?xml version="1.0" encoding="utf-8" ?>
<wp:Notification xmlns:wp="WPNotification">
<wp:Tile>
<wp:BackgroundImage>http://mydomain.com/t/k/DQAAALcAAADLhwtLmfIY_JXVhUMA4vYEemvu9dlf-rK8_SbiCGdWPyABXu1MqmZePHf5q9KHfL5J24qvWEgc6EgfparQKQCHsn938r357YSY_uci8DU3XUSg_v9HI3Kbbwmxrr6I97QpD99RfEOxwa6KhZiFTlMLLswh8HDRhlJbe-h10p40SnylDumQRhxqiRYbB3sHYPekrVyS8gJf9opaoQ-dIV1PAtKqc_WdrU37pWYHhwjKJ-QV7d0JrQ9sONEr6VitSRc/s/21556645/p/3</wp:BackgroundImage>
<wp:Count>0</wp:Count>
<wp:Title />
</wp:Tile>
</wp:Notification>
http://mydomain.com/t/k/DQAAALcAAADLhwtLmfIY_JXVhUMA4vYEemvu9dlf-rK8_SbiCGdWPyABXu1MqmZePHf5q9KHfL5J24qvWEgc6EgfparQKQCHsn938r357YSY_uci8DU3XUSg_v9HI3Kbbwmxrr6I97QpD99RfEOxwa6KhZiFTlMLLswh8HDRhlJbe-h10p40SnylDumQRhxqiRYbB3sHYPekrVyS8gJf9opaoQ-dIV1PAtKqc_WdrU37pWYHhwjKJ-QV7d0JrQ9sONEr6VitSRc/s/21556645/p/3
0
猜测一下,WP7代码可能使用了一些System.IO.Path
功能,这是因为有260个字符的限制而臭名昭著-请参阅-这经常会出现在Uri代码中-例如
一些可能的解决办法:
- 如果您可以使用更丑陋的QueryParam重写该请求,那么它可能会起作用-例如,如果您可以将URL重新组织为from-like,那么此路径处理可能会起作用
- 您可以使用类似bitly API的东西来缩短URL-
- 如果您只希望得到一点小小的改进(从300到260),那么您是否可以通过使用较短的名称和比Base64编码更紧凑的编码(例如,或更好的编码)来优化URL?(我怀疑这个问题的答案取决于您的web服务器)
String.Format(@"http://dev.virtualearth.net/REST/v1/Imagery/Map/Aerial/{0},{1}/10?mapSize=200,200&&pp={2},{3};1;&mapVersion=v1&key={4}", Lat, Lon, Lat, Lon,AppID);
这个问题的解决方案是使用Bit.ly API缩短Url
var BitlyRequest = String.Format(@"http://api.bit.ly/v3/shorten?login=name&apiKey=ApiKey&format=txt&longUrl={0}", HttpUtility.UrlEncode(MapUri));
var BackgroundImageUri = new Uri(new WebClient().DownloadString(BitlyRequest));
你试过用一个较小的文件名来排除这个问题吗?我试过了,而且很有效-这就是为什么我想知道我做错了什么。我的有效负载是500多个字节(远远低于1024字节的限制)。为什么live update tile url有这么短的限制(上面我的限制只有300个字符,不是那么大)听起来很有可能-你有没有一个例子?我已经尝试过了,但我相信问题不在于我的数据,而是Uri被解释为处理传入tile推送的路径。这可能是因为框架中的相同代码正在处理它,无论它是相对(本地)映像还是远程映像。我将进行深入研究,看看是否能截获它。添加了对我的意思的解释,并添加了另一个想法-使用像bitly这样的服务!嘿,斯图尔特-非常感谢你的回复。我最初使用了查询参数,但没有起作用(我修改了api,删除了查询参数,试图做些不同的事情——我还尝试对我的&;进行编码)。我已经考虑过bitly方法——我会编写自己的方法,而不是使用bitly来节省额外的DNS查找,但是我真的想避免这种方法,因为它意味着将我发送的密钥存储在服务器的URL中,以及添加第二个请求。非常感谢您的回复,如果我还没有投票,您的加入将证明这一点。为您添加了另一个想法:)