すべての 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行目
長文投稿失礼します!御時間ありがとうございます!