我有一个使用 PeriodicTask 后台代理的 wp8 应用程序。
该任务更新多个动态磁贴的信息,使用POST 客户端从我的服务器获取标题和图像 url 以更新动态磁贴。
后台代理在调试和发布模式下工作得很好。当使用 XAPDeployement 工具将 .xap 文件部署到我的设备中时,后台代理也可以完美运行。
但是,无论是不是beta版本,提交到wp应用商店后都无法使用。如果应用是从商店下载的,后台代理从来没有工作过,几分钟后就被系统阻止了。
由于 XAP 文件相同,为什么会出错?
部分代码:
public static Task<string> jsonPostClientTask(Dictionary<string, object> parameters, string url)
{
var results = new TaskCompletionSource<string>();
PostClient proxy = new PostClient(parameters);
try
{
proxy.DownloadStringCompleted += (sender, e) =>
{
if (e.Error == null)
{
string response = e.Result.ToString();
results.TrySetResult(response);
}
else
{
results.TrySetResult("");
results.TrySetException(e.Error);
}
};
proxy.DownloadStringAsync(new Uri(url));
}
catch
{
results.TrySetResult("");
}
return results.Task;
}
ScheduledAgent 类:
protected override void OnInvoke(ScheduledTask task)
{
foreach (var tile in tileList)
{
string dataString = jsonPostClientTask(parameters, url);
//update tile in used
FlipTileData tileData = new FlipTileData()
{
BackContent = "string content",
WideBackContent = "string back content",
BackBackgroundImage = new Uri("http://xxxx.xxx/xxx.png", UriKind.RelativeOrAbsolute),
WideBackBackgroundImage = new Uri("http://xxxx.xxx/xxx.png", UriKind.RelativeOrAbsolute),
};
ShellTile primaryTile = ShellTile.ActiveTiles.First();
if (primaryTile != null)
primaryTile.Update(tileData);
}
}