Google.Apis.Admin.Email_Migration_v2 HTTP 410 код состояния возвращен для ошибки 503
По сути, при использовании.NET-версии Google API переноса электронной почты версии 2 наше приложение отправляет слишком много запросов в секунду одному почтовому ящику / пользователю Служб Google; больше, чем 1 запрос в секунду. Возвращается исключение GoogleApiException, которое является нормальным и ожидаемым, однако в теле сообщения об ошибке говорится, что произошла ошибка службы недоступна (503), но свойство HttpStatusCode этого же экземпляра GoogleApiException соответствует коду статуса Http: Прошло (410), я включу фрагмент кода и некоторые записи журнала ниже. На данный момент, смотрите раздел вопросов внизу или читайте дальше для более подробной информации.
Какие шаги воспроизведут проблему?
Создайте процесс / приложение, которое выполняет следующее:
- Создайте объект Google.Apis.Admin.email_migration_v2.AdminService, правильно инициализируйте его, используя свои учетные данные OAuth2.0.
- Для каждого сообщения, которое необходимо отправить в Службы Google, создайте экземпляр Google.Apis.Admin.email_migration_v2.MailResource.InsertMediaUpload, используя объект AdminService сверху вниз с помощью AdminService.Mail.Insert(), предоставив соответствующие параметры.
- Вызовите MailResource.InsertMediaUpload.UploadAsync, перехватывая любые возникающие ошибки.
Сделайте следующее:
- Начните отправлять сообщения с экспоненциальной скоростью, отсекая сотни экземпляров этого процесса / приложения, указывающих на одного и того же пользователя, с использованием одинаковых учетных данных OAuth2.0.
- Сядьте, потягивайте горную росу и дождитесь появления ошибок [503]...
Как только ошибки начинают накапливаться рядом с вашими приложениями... не нужно забивать плохие серверы Google, кроме как для тестирования обработки исключений приложений...
Каков ожидаемый результат? Что ты видишь вместо этого?
Использование экземпляра следующего типа: Google.GoogleApiException
Можно ожидать, что свойство экземпляра HttpStatusCode будет эквивалентно System.Net.HttpStatusCode.ServiceUnavailable вместо System.Net.HttpStatusCode.Gone.
Какую версию продукта вы используете?
Google.Apis.Admin.Email_Migration_v2 (1.8.1.20)
Какая у вас операционная система?
Windows Server 2008 R2 Enterprise (SP1)
Какая у тебя IDE?
Visual Studio 2013 Premium
Что такое версия платформы.NET?
4.0.30319
Пожалуйста, укажите дополнительную информацию здесь.
Вот фрагмент кода метода, вызываемого для загрузки:
UploadStatus TryUpload(MailResource.InsertMediaUpload insertMediaUpload)
{
try
{
IUploadProgress uploadProgress = insertMediaUpload.UploadAsync(_cancellationToken).Result; // Task.Result locks this thread until completed.
if (uploadProgress != null && uploadProgress.Exception != null)
{
// Display additional information on any of the various exceptions that can be returned by the upload call.
HandleUploadProgressException(uploadProgress);
}
return uploadProgress != null ? uploadProgress.Status : UploadStatus.Failed;
Вот фрагмент кода из метода, который отображает вывод исключения.
void HandleUploadProgressException(IUploadProgress uploadProgress)
{
if (uploadProgress.Exception is GoogleApiException)
{
GoogleApiException gApiEx = uploadProgress.Exception as GoogleApiException;
throw new vsEventException(vsMapEvent.MapHttpError(gApiEx.HttpStatusCode, vsEventMessages.Id.errGmailUnidentifiableGoogleApiException),
String.Format("GoogleApiException handled in GmailMessenger.HandleUploadProgressException. HttpStatusCode: {0}", gApiEx.HttpStatusCode),
gApiEx);
}
Вот перефразированный вывод GoogleApiException, обработанного методом HandleUploadProgressException: (обратите внимание на использование пользовательского класса ведения журнала; вывод в DebugView)
** Контекстная информация **
Ошибка при попытке записи элемента в Gmail...
** Детали мероприятия **
VS-EventID: 30003 (errGmailTryUpload) GoogleApiException обрабатывается в GmailMessenger.HandleUploadProgressException. HttpStatusCode: Gone
** Внутренние детали исключения **
Администратор службы выдал исключение: Google.GoogleApiException: Google.Apis.Requests.RequestError
Сервис недоступен. Пожалуйста, попробуйте еще раз [503]
Ошибки [Сообщение [Служба недоступна. Пожалуйста, попробуйте еще раз] Местоположение [ - ] Причина [backendError] Домен [global] ]
в Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Задача)
в Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Задача)
в Google.Apis.Upload.ResumableUpload`1.d__e.MoveNext()
Вопросы:
- Может кто-нибудь пролить свет на ожидаемое поведение или ошибку?
- Если это ожидаемый результат, как приложение должно обрабатывать ошибку 410? Я знаю, что когда встречается большинство, если не все 400 ошибок, обработка этого частичного элемента должна быть остановлена, но это, похоже, не локальная проблема, а скорее проблема на стороне сервера.
Я ценю любые ответы, я знаю, что это может быть трудно для вопросов, таких как этот.