Google.Apis.Admin.Email_Migration_v2 HTTP 410 код состояния возвращен для ошибки 503

По сути, при использовании.NET-версии Google API переноса электронной почты версии 2 наше приложение отправляет слишком много запросов в секунду одному почтовому ящику / пользователю Служб Google; больше, чем 1 запрос в секунду. Возвращается исключение GoogleApiException, которое является нормальным и ожидаемым, однако в теле сообщения об ошибке говорится, что произошла ошибка службы недоступна (503), но свойство HttpStatusCode этого же экземпляра GoogleApiException соответствует коду статуса Http: Прошло (410), я включу фрагмент кода и некоторые записи журнала ниже. На данный момент, смотрите раздел вопросов внизу или читайте дальше для более подробной информации.

Какие шаги воспроизведут проблему?

Создайте процесс / приложение, которое выполняет следующее:

  1. Создайте объект Google.Apis.Admin.email_migration_v2.AdminService, правильно инициализируйте его, используя свои учетные данные OAuth2.0.
  2. Для каждого сообщения, которое необходимо отправить в Службы Google, создайте экземпляр Google.Apis.Admin.email_migration_v2.MailResource.InsertMediaUpload, используя объект AdminService сверху вниз с помощью AdminService.Mail.Insert(), предоставив соответствующие параметры.
  3. Вызовите MailResource.InsertMediaUpload.UploadAsync, перехватывая любые возникающие ошибки.

Сделайте следующее:

  1. Начните отправлять сообщения с экспоненциальной скоростью, отсекая сотни экземпляров этого процесса / приложения, указывающих на одного и того же пользователя, с использованием одинаковых учетных данных OAuth2.0.
  2. Сядьте, потягивайте горную росу и дождитесь появления ошибок [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()

Вопросы:

  1. Может кто-нибудь пролить свет на ожидаемое поведение или ошибку?
  2. Если это ожидаемый результат, как приложение должно обрабатывать ошибку 410? Я знаю, что когда встречается большинство, если не все 400 ошибок, обработка этого частичного элемента должна быть остановлена, но это, похоже, не локальная проблема, а скорее проблема на стороне сервера.

Я ценю любые ответы, я знаю, что это может быть трудно для вопросов, таких как этот.

0 ответов

Другие вопросы по тегам