1

ファイルを 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例外をスローします。が設定され、oneDriveFolderIdOneDrive に存在します。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()
4

3 に答える 3

0

これは実際にはエラー メッセージの解決策ではありませんが、Live.SDK の参照を Windows Phone dll に変更したため、BackgroundUploadAsync(path, uri, overwrite) メソッドを使用できるようになり、動作します。

Auth メソッドも変更する必要がありました。

于 2014-09-14T20:38:20.687 に答える
0

アプリをストアに「関連付ける」必要がありました。

Visual Studio のソリューション エクスプローラーでプロジェクト ラインを右クリックします。

ストアを左クリック -> アプリをストアに関連付ける

私は Microsoft 開発者としてサインアップする必要がありました (そして、その料金を支払う必要がありました) が、一度サインアップすると、BackgroundUploadAsync への呼び出しで適切な値が返されました。

とにかく最終的には行く方向に私を連れて行っていたので、一体何だろうと思いました。

于 2015-06-02T18:39:39.680 に答える
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" />
于 2015-03-14T16:13:35.220 に答える