Объект BackgroundUploadAsync Error не установлен в экземпляр

Я попытался загрузить файл в OneDrive. Я успешно подключаюсь и аутентифицируюсь в OneDrive, но при попытке загрузки получаю сообщение об ошибке: Object reference not set to an instance of an object.

Код:

IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication();
// Release all resources from DB 
App.AppViewModel.DisposeCurrentDB();

IsolatedStorageFileStream toUploadStream = iso.OpenFile(AppResources.DatabaseName + ".sdf", FileMode.Open);

LiveConnectClient liveClient = new LiveConnectClient(oneDriveAuthClient.Session);

try
{
    LiveOperationResult uploadResult = await liveClient.BackgroundUploadAsync(
        oneDriveFolderId, 
        DatabaseBackupname, 
        toUploadStream.AsInputStream(),
        OverwriteOption.Overwrite);

    dynamic result = uploadResult.Result;
    MessageBox.Show("Upload successful. Uploaded to " + result.source);
}
catch (LiveConnectException ex)
{
    MessageBox.Show("Error uploading backup: " + ex.Message);
}

App.AppViewModel.RefreshCurrentDB();

Метод BackgroundUploadAysnc выдает исключение. oneDriveFolderId установлен и существует в OneDrive. DatabaseBackupname — это правильное новое имя файла, которого нет в OneDrive. Я проверил поток в отладчике, и этот объект не был пустым и имел размер.

Stacktrace
   at Microsoft.Live.Operations.TailoredUploadOperation.<OnGetUploadLinkCompleted>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__4(Object state)
   at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

Я изменил код загрузки на это:

LiveUploadOperation operation = await liveClient.CreateBackgroundUploadAsync(
    oneDriveFolderId, 
    DatabaseBackupname, 
    toUploadStream, 
    OverwriteOption.DoNotOverwrite);
await operation.StartAsync();

и метод CreateBackgroundUploadAsync выдает следующее исключение:

Message = "Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))"
   at Windows.Networking.BackgroundTransfer.BackgroundUploader.CreateUploadFromStreamAsync(Uri uri, IInputStream sourceStream)
   at Microsoft.Live.Operations.CreateBackgroundUploadOperation.<OnGetUploadLinkCompleted>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.AsyncMethodBuilderCore.<ThrowAsync>b__4(Object state)
   at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
   at System.Threading.ThreadPoolWorkQueue.Dispatch()
   at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()

person Kn0rK3    schedule 14.09.2014    source источник


Ответы (3)


На самом деле это не решение для сообщения об ошибке, но я изменил ссылку Live.SDK на dll Windows Phone, и теперь я могу использовать метод BackgroundUploadAsync (путь, uri, перезапись), и он работает.

Мне также пришлось изменить метод Auth.

person Kn0rK3    schedule 14.09.2014

Я потратил несколько часов на эту точную проблему. Для меня это происходило в приложении Windows Phone 8.0, которое я переносил на Windows Phone 8.1 Silverlight. Что, наконец, решило проблему для меня, так это обновление до последней версии Microsoft Advertising SDK для Windows Phone. Я перешел с версии 6.2.960.0 на 8.1.50112.0. Как только я пересобрал после этого, мои загрузки в OneDrive начали работать отлично. Не совсем уверен, в чем была основная причина, но решил поделиться ею здесь, если это кому-нибудь поможет.

Чтобы было ясно, мой файл проекта пошел от этого:

<Reference Include="Microsoft.Advertising.Mobile, Version=6.2.960.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Advertising.Mobile.UI, Version=6.2.960.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />

к этому:

<Reference Include="Microsoft.Advertising.Mobile, Version=8.1.50112.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Advertising.Mobile.Common, Version=8.1.50112.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
<Reference Include="Microsoft.Advertising.Mobile.UI, Version=8.1.50112.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" />
person GusP    schedule 14.03.2015

Мне пришлось «связать» мое приложение «с Магазином».

Щелкните правой кнопкой мыши строку проекта в обозревателе решений в Visual Studio.

Щелкните левой кнопкой мыши по Магазину -> Связать приложение с Магазином.

Мне пришлось зарегистрироваться в качестве разработчика Microsoft (и заплатить за это), но как только я это сделал, мои вызовы BackgroundUploadAsync вернули разумные значения.

Поскольку это вело меня в том направлении, в котором я в конечном итоге все равно пойду, я подумал: «Какого черта».

person LionelGoulet    schedule 02.06.2015