Ошибка FAIL_TO_RETRIEVE_UPDATE (API Creatives V2) - PullRequest
1 голос
/ 23 сентября 2019

У меня возникли проблемы с размещением объявлений через LinkedIn API.Это вопрос исключительно для инженеров LinkedIn, так как я уверен, что это не проблема кода.Кажется, проблема возникает во время массовой публикации кампаний с соответствующими объявлениями.Использование Thread.Sleep / await Task.Delay методов и синхронный запуск не помогают.Ошибка не носит описательный характер, но я вычеркнул неправильный запрос и причины ошибки кода.Это определенно проблема API.Я хотел бы получить больше информации о количестве звонков, которые я могу сделать на сервер, и о том, как часто я могу их делать, но, похоже, это тоже не связано с этим.Я попытался отладить и подождать 10-20 секунд перед отправкой объявления.

Ниже показано, что я делаю через API:

  1. Публикация нескольких общих ресурсов,
  2. Размещая несколько кампаний,
  3. Размещая несколько объявлений (связывая с ними релевантный общий ресурс и урну кампании)

Позвольте мне добавить, что к тому времени, когда я пытаюсь сделать это, я убедилсячтобы опубликовать объявление, у него есть идентификатор ссылочного ресурса и идентификатора ссылочной кампании.

Сообщение об ошибке:

{"message": "Проверка не удалась, потому что [{reason =FAIL_TO_RETRIEVE_UPDATE, поле = ссылка, batchIndex = 0, тип = REMOTE_OPERATION_FAILED, сообщение = не удалось получить обновление. Может быть временная ошибка. Ссылка, параметры = {значение =, ключ =}}] ", состояние": 400}

1 Ответ

0 голосов
/ 25 сентября 2019

А пока, пожалуйста, взгляните на следующий способ решения этой проблемы:

Я представил некоторую логику повторных попыток в сочетании с методом await Task.Delay(), который, кажется, немного помогает, и еслине удается выполнить вышеуказанную ошибку, обычно для продолжения достаточно 4-5 повторных попыток.

public async Task<string> PostTheContentAsync(HttpClient httpClient, object campaignManagerObject, string reqUrl, int retriesRemaining = 5)
{
    try
    {
        ByteArrayContent byteContent = CreateByteArrayContent(campaignManagerObject);
        var response = await httpClient.PostAsync(reqUrl, byteContent);
        response.EnsureSuccessStatusCode();
        IEnumerable<string> headerValue = response.Headers.GetValues("X-LinkedIn-Id");
        return headerValue.First();
    }
    catch
    {
        if (retriesRemaining > 0) //and exception is temporary
        {
            await Task.Delay(5000);
            return await PostTheContentAsync(httpClient, campaignManagerObject, reqUrl, retriesRemaining - 1);
        }
        throw new Exception($"Error while posting the content of {campaignManagerObject.GetType()} for URL: {reqUrl} in {nameof(ManagementBaseClass)}, {nameof(PostTheContentAsync)}.");
    }
}
...