2011-03-04 85 views
0

我用手机来推动动态磁贴更新本身,但是我收到的错误:直播瓷砖频道推错误“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> 
+1

你尝试使用较小的文件名排除这一点? – 2011-03-04 10:39:54

+0

我有,它的工作原理 - 这就是为什么我想知道我做错了什么。我的有效载荷是500个奇数字节(低于1024作为限制)。为什么实时更新磁贴网址有这么短的限制(我的上面只有大约300个字符,并不那么庞大) – Doug 2011-03-04 10:58:54

回答

1

在猜测,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

一些可能的解决方法:

+0

听起来像是一个真正的可能性 - 你有一个例子吗? – Doug 2011-03-04 16:25:44

+0

我对此有所了解,但我相信问题不在于我的数据,而是将Uri解释为处理传入磁贴推送的路径。这可能是因为框架中的相同代码处理它,无论它是相对(本地)图像还是远程图像。我会仔细研究一下,看看我是否可以截取它。 – Doug 2011-03-05 02:58:13

+0

添加了我的意思的解释 - 再加上一个替代的想法 - 使用像一个服务一样! – Stuart 2011-03-05 10:33:36

0

我也有同样的问题(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));