2011-03-04 2 views
0

나는 그러나 내가 오류 수신하고, 자체에 라이브 타일 업데이트를 밀어 전화를 사용하고 있습니다 :라이브 타일 채널 푸시 오류 "MessageBadContent"

{Microsoft.Phone.Notification.NotificationChannelErrorEventArgs}

을 " MessageBadContent "

의 errorCode = -2129589899

이 나는 ​​타일에 대한 열린 우리당에 전송하고있는 URL이 너무 길기 때문에 이것이 느낌이있다.

이 문제가 발생한 사람이 있습니까?

업데이트를 보내는 코드 :

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

는 작은 파일 이름을 사용하여 시도해야 이걸 배제 할 건가요? –

+0

나는 가지고 있고, 그것은 작동한다 - 이것이 내가 왜 잘못하고 있는지 궁금해하는 이유이다. 내 페이로드는 500 바이트 이상입니다 (1024 이하로 제한). 왜 실시간 업데이트 타일 URL에 짧은 제한이 있습니까? (위의 광산은 그다지 크지 않은 약 300 자입니다) – Doug

답변

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

몇 가지 가능한 해결 방법 :

  • 사용으로 해당 요청을 다시 할 수 있다면 이보다 QueryParam의 그것은 그냥 작동 - 예를 들어, URL을 http://mydomain.com/img/tile/p/23232/fetch?longval=2332323...33e==과 같은 URL로 재구성 할 수 있으면이 경로 처리가 작동 할 수 있습니다.

  • URL을 줄이기 위해 bitly API와 같은 것을 사용할 수 있습니까? http://code.google.com/p/bitly-api/wiki/ApiDocumentation?

  • 작은 (300에서 260까지) 개선을 찾고 있다면 짧은 이름을 사용하고 Base64 인코딩보다 더 컴팩트 한 것을 사용하여 URL을 최적화 할 수 있습니다. http://en.wikipedia.org/wiki/Ascii85 또는 그 이상? 나는 또한 타일의 원격 이미지 열린 우리당이 동적으로지도 이미지를 반환 빙지도 REST API를 사용하여 생성 된 동일한 문제 (MessageBadContent)을했다

+0

은 실제 가능성과 비슷합니다 - 예제가 있습니까? – Doug

+0

Ive는 이것에 연극을 가지고 있지만 문제는 내 데이터와 관련이 없다고 생각하지만 Uri는 들어오는 타일 푸시를 처리하는 경로로 해석됩니다. 이것은 프레임 워크의 동일한 코드가 상대 (로컬) 이미지이든 원격 코드이든 상관없이 처리하기 때문일 수 있습니다.나는 주위를 파고 가서 내가 그것을 가로 챌 수 있는지를 알게 될 것이다. – Doug

+0

내가 무엇을 의미하는지에 대한 설명을 추가했습니다. - 또 다른 아이디어를 추가했습니다. – Stuart

0

(나는이에 대한 대답은 웹 서버에 따라 의심) .

이미지 URI가이 문제에 대한 해결책은 Bit.ly API를 사용하여 URL을 단축했다

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); 

다음과 같은 형식이었다

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)); 
관련 문제