0

すべての UploadAsync メソッド呼び出しから HttpStatusCode を取得しようとしています。指数バックオフ アルゴリズムを適切に実行して失敗したアップロードを再試行し、アップロードを再試行しないときにユーザーにエラー メッセージを表示し、アップロードの成功を報告するには、ステータス コードが必要です。以下のリンクで提案されている Tor Jonsson のように、それがクリーンで Exception.Message (文字列) プロパティから解析されていない限り、どのように受信されるかは気にしません。

「Bad Request Error [400]」を強制するために、MailResource.InsertMediaUpload のコンストラクターで無効なユーザーキー (電子メール) を提供しただけです。
例: MailResource.InsertMediaUpload(mailItem, "invalidEmail@domain.com" , stream, "message/rfc822")

問題

1) GoogleApiException.HttpStatusCode は常に 0 (使用不可) です。Exception.Message に括弧内のステータス コードが含まれているように見える場合でも。例[400]
2) GoogleApiRequestException が見つかりません。

質問
1) 指数バックオフ アルゴリズムを実行する最良の方法は何ですか?
2) この場合、これはこのプロパティの予想される動作ですか?
3) GoogleApiRequestException はまだ存在しますか?

補足:
GoogleApiRequestException クラスが GoogleApiException クラスと同じファイルに含まれていないことにも気付きました。別の名前空間に移動または削除されましたか? GoogleApiRequestException オブジェクトをキャッチして、その RequestError オブジェクトを取得したいからです。

私が何を意味するかについて、2 つの diff へのリンクを追加し

まし

。 : http://code.google.com/p/google-api-dotnet-client/source/browse/Src/GoogleApis/GoogleApiException.cs?r=d6f06e92d90b635c179013e2c287b42b82909c09

ソース

NuGet (1.6.0.8-beta) の最新のバイナリを使用しています

私の問題に関連して見つけた唯一の質問:(2つのリンクしか投稿できません...ここに生のものがあります )

コード: (カスタム ロガーを使用して debugview に書き込む)

    public int Index; // Used to Id the process
    private void TryUpload(MailResource.InsertMediaUpload upload, out IUploadProgress uploadProgress, out bool retryUpload)
    {
        uploadProgress = null;
        retryUpload = false;
        CancellationToken token;

        try
        {
            uploadProgress = upload.UploadAsync(token).Result;

            if (uploadProgress.Exception != null)
            {
                _logger.WriteTrace("EXCEPTION!!! Type: {0}", uploadProgress.Exception.GetType().ToString()); // Remove:

                // *) Handle all of the various exceptions
                if (uploadProgress.Exception is JsonReaderException)
                {
                    JsonReaderException jreEx = uploadProgress.Exception as JsonReaderException;
                    _logger.WriteTrace("JsonReaderException-> Message: {0}", jreEx.Message);
                }

                if (uploadProgress.Exception is TokenResponseException)
                {
                    TokenErrorResponse trEx = uploadProgress as TokenErrorResponse;
                    _logger.WriteTrace("TokenErrorResponse-> Message: {0}", trEx.Error);
                }

                if (uploadProgress.Exception is HttpRequestValidationException)
                {
                    HttpRequestValidationException hrvEx = uploadProgress.Exception as HttpRequestValidationException;
                    _logger.WriteTrace("HttpRequestValidationException-> Message: {0}", hrvEx.Message);
                    _logger.WriteTrace("HttpRequestValidationException-> Status Code: {0}", hrvEx.GetHttpCode());
                }

                if (uploadProgress.Exception is GoogleApiException)
                {
                    GoogleApiException gApiEx = uploadProgress.Exception as GoogleApiException;
                    _logger.WriteTrace("GoogleApiException-> Message: {0}", gApiEx.Message);
                    _logger.WriteTrace("GoogleApiException-> Status Code: {0}", gApiEx.HttpStatusCode);
                }
            }
        }
        catch (Exception ex)
        {
            _logger.WriteTrace(ex, "An exception occured while uploading...");
        }
        finally
        {
            if (uploadProgress != null)
                _logger.WriteTrace("Upload Completed... Status: {0} Exception?: {1}", 
                    uploadProgress.Status, 
                    (uploadProgress.Exception == null) ? "None" : uploadProgress.Exception.ToString());
            else
                _logger.WriteTrace("Upload Aborted... Exited without returning a status!");
        }
    }

出力スニペット
[5224] (T101) VSLLC: 例外!!! タイプ: Google.GoogleApiException
[5224] (T101) VSLLC: GoogleApiException-> メッセージ: Google.Apis.Requests.RequestError
[5224] Bad Request [400]
[5224] Errors [
[5224] Message[Bad Request] Location[ - ] Reason[badRequest] Domain[global]
[5224] ]
[5224] (T101) VSLLC: GoogleApiException-> Status Code: 0
[5224] (T101) VSLLC: Upload Completed... Status: Failed Exception?: サービス管理者が例外がスローされました: Google.GoogleApiException: Google.Apis.Requests.RequestError
[5224] Bad Request [400]
[5224] Errors [
[5224] Message[Bad Request] Location[ - ] Reason[badRequest] Domain[global]
[5224 ] ] ]
[5224]
[5224] Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (タスク タスク)
で [5224] Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess (タスク タスク)
で [5224] Microsoft.Runtime.CompilerServices.TaskAwaiter.ValidateEnd で(Task task)
[5224] at Google.Apis.Upload.ResumableUpload`1.d__0.MoveNext() in c:\code\google.com\google-api-dotnet-client\default\Tools\Google.Apis.Release \bin\Debug\output\default\Src\GoogleApis\Apis[Media]\Upload\ResumableUpload.cs:373行目


長文投稿失礼します!御時間ありがとうございます!

4

1 に答える 1