2014-09-14 2 views
1

OneDrive에 파일을 업로드하려고했습니다. 나는 성공적으로 연결하고 원 드라이브에 인증 만 업로드 할 때, 나는 오류 얻을 해요 : Object reference not set to an instance of an object.BackgroundUploadAsync 인스턴스에 오류 개체가 설정되지 않았습니다.

코드는 다음과 같습니다

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

답변

0

을하지만, Live.SDK 참조를 Windows Phone dll로 변경 했으므로 이제 BackgroundUploadAsync (path, uri, 덮어 쓰기) 메서드를 사용할 수 있으며 작동합니다.

또한 Auth 메서드를 변경해야했습니다.

0

이 정확한 문제에 대해 몇 시간을 낭비했습니다. Windows Phone 8.1 Silverlight로 마이그레이션 중이던 Windows Phone 8.0 앱에서 나에게 이런 일이 발생했습니다. 마침내 나를 위해 해결 된 것은 Windows Phone 용 최신 Microsoft Advertising SDK로 업데이트하는 것이 었습니다. 나는 버전 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" /> 
0
I가 "동료"내 애플 리케이션을했다

Visual Studio의 솔루션 탐색기에서 프로젝트 줄을 마우스 오른쪽 단추로 클릭하십시오.

스토어를 마우스 왼쪽 버튼으로 클릭 -> 나는 마이크로 소프트 개발자로 가입했다 (그리고 지불),하지만 난 것을 한 번, BackgroundUploadAsync에 내 전화는 합리적인 값을 반환 스토어

와 연결 앱.

내가 결국에는 어차피 가겠다는 방향으로 나를 데려 가고 있었기 때문에 나는 무엇을 생각했다.

관련 문제