Windows phone 7 活动磁砖通道推送错误“;MessageBadContent";

Windows phone 7 活动磁砖通道推送错误“;MessageBadContent";,windows-phone-7,Windows Phone 7,我正在使用手机将实时互动程序更新推送到自身,但我收到了以下错误: {Microsoft.Phone.Notification.NotificationChannelErrorEventArgs} “MessageBadContent” 错误代码=-21295899 我有一种感觉,这是因为我正在为互动程序发送的Uri中的URL太长了 还有其他人有这个问题吗 发送更新的代码: HttpNotificationChannel channel = HttpNotificationChannel.Find

我正在使用手机将实时互动程序更新推送到自身,但我收到了以下错误:

{Microsoft.Phone.Notification.NotificationChannelErrorEventArgs}

“MessageBadContent”

错误代码=-21295899

我有一种感觉,这是因为我正在为互动程序发送的Uri中的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();
            }
        } 
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服务器)


当使用Bing Maps REST API返回地图图像动态生成磁贴的远程图像Uri时,我也遇到了同样的问题(MessageBadContent)

图像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缩短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中,以及添加第二个请求。非常感谢您的回复,如果我还没有投票,您的加入将证明这一点。为您添加了另一个想法:)