直播瓷砖频道推错误“MessageBadContent”
我用手机来推动动态磁贴更新本身,但是我收到的错误:直播瓷砖频道推错误“MessageBadContent”
{} Microsoft.Phone.Notification.NotificationChannelErrorEventArgs
“ MessageBadContent”
错误码= -2129589899
我有一种感觉,这是因为我在乌里发送用于图块的网址太长。
有其他人有这个问题吗?
代码发送更新:
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();
}
}
在我发送包的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>
在猜测,WP7的代码可能会使用一些System.IO.Path
的功能,这是臭名昭著有260个字符的限制 - 请参阅http://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx#maxpath - 这经常会发现它通向Uri代码的方式 - 例如http://social.msdn.microsoft.com/Forums/en/netfxnetcom/thread/723e6bfd-cab7-417b-b487-67f1dcfa524f
一些可能的解决方法:
如果你可以重写该请求与使用丑陋QueryParam的那么威力只是工作 - 例如如果您可以将您的网址重组为http://mydomain.com/img/tile/p/23232/fetch?longval=2332323...33e==,则此路径处理可能有效。
你可以使用像API这样的东西来缩短URL - http://code.google.com/p/bitly-api/wiki/ApiDocumentation?
如果你正在寻找一个小的(300到260)改进,那么你可以使用较短的名称和使用比Base64编码更紧凑的东西来优化URL http://en.wikipedia.org/wiki/Ascii85还是更好? (我怀疑这个问题的答案取决于你的Web服务器上)
我也有同样的问题(MessageBadContent)当用于图块的远程图像乌里是动态使用Bing地图REST API返回地图图像生成。
图像URI是以下格式
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缩短网址
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));
你尝试使用较小的文件名排除这一点? – 2011-03-04 10:39:54
我有,它的工作原理 - 这就是为什么我想知道我做错了什么。我的有效载荷是500个奇数字节(低于1024作为限制)。为什么实时更新磁贴网址有这么短的限制(我的上面只有大约300个字符,并不那么庞大) – Doug 2011-03-04 10:58:54