Ошибка отправки канала Live Tile "MessageBadContent" - PullRequest
0 голосов
/ 04 марта 2011

Я использую телефон, чтобы отправить себе обновление плитки, но я получаю сообщение об ошибке:

{Microsoft.Phone.Notification.NotificationChannelErrorEventArgs}

"MessageBadContent"

errorCode = -2129589899

У меня такое ощущение, что это потому, что URL, который я отправляю в Uri для плитки, слишком длинный.

У кого-нибудь еще была эта проблема?

код, отправляющий обновление:

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>

Ответы [ 2 ]

1 голос
/ 04 марта 2011

Можно предположить, что в коде 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, тогда может просто сработать - например, если выможет реорганизовать ваш URL-адрес как http://mydomain.com/img/tile/p/23232/fetch?longval=2332323...33e==, тогда эта обработка пути может сработать.

  • Можете ли вы использовать что-то вроде bitly API для сокращения URL - http://code.google.com/p/bitly-api/wiki/ApiDocumentation?

  • Если вы ищете простонебольшое (от 300 до 260) улучшение, тогда можно ли оптимизировать URL-адрес с помощью более коротких имен и с помощью чего-то более компактного, чем кодировка Base64 - например, http://en.wikipedia.org/wiki/Ascii85 или лучше?(Я подозреваю, что ответ на это зависит от вашего веб-сервера)

0 голосов
/ 13 апреля 2011

У меня также была такая же проблема (MessageBadContent), когда Uri удаленного изображения для плитки был динамически создан с помощью API-интерфейса REST Bing Maps, возвращающего изображение карты.

Изображение 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);

Решением этой проблемы было сокращение URL-адреса с помощью API Bit.ly

  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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...