我正在尝试将一个简单的.cer文件上传到SkyDrive。无论我使用哪种LiveConnectClient-Method
,都不会发生任何事情。没有编译,运行时或其他异常,我的应用程序永远不会收到LiveOperationResult
。我正在使用模拟器,我可以登录MS Live(所以我的互联网连接很好)。以下是所用代码的摘录:
using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
{
using(var fileStream = store.OpenFile(certPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
try
{
client = new LiveConnectClient(session);
//LiveOperationResult operationResult = await client.UploadAsync("me/skydrive", certPath, fileStream, OverwriteOption.Overwrite, new System.Threading.CancellationToken(false), null);
LiveOperationResult res= await client.BackgroundUploadAsync("me/skydrive",
new Uri("/shared/transfers/cert.cer", UriKind.Relative),
OverwriteOption.Overwrite);
linkTextBlock.Text = "Done";
如前所述,TextBlock
从不显示"完成"。如果使用UploadAsync
或BackgroundUploadAsync
方法没有区别。
BackgroundUploadAsync 使用 Windows Phone 后台文件传输,这是一个智能文件上传和下载调度系统。而UploadAsync使用即时HTTP文件上传和下载。
使用后台文件传输即表示您同意以下上传限制:
最大上传文件大小
通过蜂窝连接 - 5 MB
通过带电池供电的 Wi-Fi 连接 - 20 MB
通过外部电源的 Wi-Fi 连接 - 100 MB
对队列上传和下载的最大数量以及其他限制也有限制。阅读完整的文档@ http://msdn.microsoft.com/en-us/library/windowsphone/develop/hh202955(v=vs.105).aspx
所有这些限制都可能导致您的异步等待等待。尽管这很痛苦,但后台文件传输设定的限制会带来最佳的用户体验(即应用程序关闭时的更新),最佳的电池寿命和最佳的蜂窝数据使用。最终,由您的应用决定是要使用直接的WebRequests(uploadAsync)还是后台文件传输(BackgroundUploadAsync)。