0

GoogleドライブSDKを使用しているときにネットワーク障害の例外を処理しようとしていますが、次の問題があります。ネットワークを切断してこのコードを実行しています

try
{
    FilesResource.InsertRequest r = service_.Files.Insert(body);
    r.Fetch();
} catch
{
    Console.WriteLine("Error");
}

ただし、「エラー」を出力する代わりに、未処理の例外が原因でアプリケーションが終了します。デバッガーは次のスタックトレースを表示します

Unable to connect to the remote server
   at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult, TransportContext& context)
   at System.Net.HttpWebRequest.EndGetRequestStream(IAsyncResult asyncResult)
   at Google.Apis.Requests.Request.EndAttachBody(IAsyncResult asyncResult) in c:\code.google.com\google-api-dotnet-client\default_release\Tools\BuildRelease\bin\Debug\output\default\Src\GoogleApis\Apis\Requests\Request.cs:line 714
   at System.Net.LazyAsyncResult.Complete(IntPtr userToken)
   at System.Net.ContextAwareResult.CompleteCallback(Object state)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Net.ContextAwareResult.Complete(IntPtr userToken)
   at System.Net.LazyAsyncResult.ProtectedInvokeCallback(Object result, IntPtr userToken)
   at System.Net.HttpWebRequest.SetResponse(Exception E)
   at System.Net.HttpWebRequest.SetAndOrProcessResponse(Object responseOrException)
   at System.Net.ConnectionReturnResult.SetResponses(ConnectionReturnResult returnResult)

Fetch()内部でいくつかの非同期操作を実行しているように見え、例外は処理されません。したがって、この例外を処理する方法が見つかりません。それは常に私のアプリケーションを終了します。どうすれば修正できますか?

アップデート

このコード行を見つけました

Stream bodyStream = request.EndGetRequestStream(asyncResult);

Src\GoogleApis.Tests\Apis\Requests\RequestTest.cs:731

EndGetRequestStreamは、スレッドによって処理されない例外をスローするため、これはクライアントAPIのバグのようです。私は正しいですか?回避策はありますか?

アップデート

何か答えはありますか?それは非常に重要です。ネットワークを切断するたびにアプリケーションがクラッシュします。これは、GoogleAPIのソースコードに触れないと解決できません。コードを変更 BeginGetResponse()GetResponse()て再コンパイルしたので、現在は正常に機能しFetch()、期待どおりに例外がスローされますが、同期操作と非同期操作は共通のコードを共有しているため(同期操作は非同期で実行され、待機します)、現在、非同期フェッチを実行できません。これを直してくれませんか?

アップデート

グーグルは言うWe support the Google Drive SDK on Stack Overflow。皆さん、SDKに本当にある種のサポートを提供していますか?私はほぼ5日間どんな答えも待っています。だれかいますか?

4

2 に答える 2

2

遅れて申し訳ありません。バグのようです。Issue Tracker で新しい問題をオープンしました。ここで詳細を追加できます。次のリリースで修正する予定です。

于 2013-03-25T10:49:42.170 に答える
0

数週間以内に、この問題を修正したバージョン 1.4.0-beta を公開する予定です。お知らせしますが、Google.Apis コア ライブラリの新しいバージョンはPCLになります。.NET フレームワークを 4.0 にアップグレードする必要があり、TPL が頻繁に使用されます。

于 2013-06-07T01:21:36.363 に答える