Пакетное геокодирование статуса карт Azure 202 12+ часов спустя

Я использую RestSharp для программной сборки / создания / десериализации вызова API Azure Maps для пакетного геокодирования. В настоящее время тестирую процесс с 5-ю адресными пакетами - я ожидал, что это произойдет быстро после всех сообщений о "10 тыс. Адресов в минутах". Но запрос, который я успешно сделал вчера, по-прежнему недоступен, он показывает только статус "Принят 202", который, как говорится в документации, означает, что он все еще обрабатывается... и на странице состояния не отображается сбой.

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

Мой вызов POST генерируется с кодом ниже и возвращает состояние OK с необходимым заголовком Location с тем, что похоже на действительную ссылку.

public RestRequest CreateBatchRequest()
{
    var request = new RestRequest($"{_batchAddressEndpoint}subscription-key={_apiToken}", Method.POST);
    request.AddQueryParameter("api-version", _version);

    var batchRequestBody = GenerateQueryBatch();

    var requestBodyJson = JsonConvert.SerializeObject(batchRequestBody);

    request.AddHeader("Content-Type", "application/json");
    request.AddParameter("undefined", requestBodyJson, ParameterType.RequestBody);

    return request;
}

protected AzureBatchRequest GenerateQueryBatch()
{
    var requestBody = new AzureBatchRequest();

    foreach (var address in Addresses)
    {
        var addressString = $"{address.Address}, {address.City}, {address.State}";

        if (!string.IsNullOrEmpty(_country))
            addressString = $"{address.Address}, {address.City}, {address.State}, {_country.ToUpper()}";

        requestBody.Queries.Add($"?query={addressString}&limit={_resultLimit}");
    }

    return requestBody;
}

Это дает мне параметр body для запроса, который соответствует документации (фактические адреса скрыты по соображениям конфиденциальности, но они были успешно геокодированы с другими службами)...

{
    undefined={"queries":[
        "?query=123 MAIN ST, LOS ANGELES, CA&limit=3",
        "?query=123 MAIN ST, PLEASANTVILLE, CA&limit=3",
        "?query=123 MAIN ST, STOCKTON, CA&limit=3",
        "?query=123 MAIN ST, SAN DIEGO, CA&limit=3",
        "?query=123 MAIN ST, REDDING, CA&limit=3"
    ]}
}

Я получаю значение заголовка Location и вызываю его с помощью кода ниже...

public List<Coordinate> DeserializeBatchResponse(RestResponse response)
{
    var batchLink = response.Headers.Where(header => header.Name.Equals("Location")).FirstOrDefault();

    var request = new RestRequest(batchLink.Value.ToString(), Method.GET);

    var batch = SendRequest(request);

    if (batch.StatusCode == System.Net.HttpStatusCode.Accepted)
    {
        var isProcessing = true;

        while (isProcessing)
        {
            Thread.Sleep(TimeSpan.FromSeconds(60));

            request = new RestRequest(batchLink.Value.ToString(), Method.GET);

            batch = SendRequest(request);

            if (batch.StatusCode != System.Net.HttpStatusCode.Accepted)
                isProcessing = false;
        }
    }
}    

И это никогда не покидает эту петлю. Когда я жестко кодирую URL-адрес, возвращенный из вчерашнего запроса POST, он ведет себя так же, как и то же самое при попытке в Postman изолировать от остальной части моего кода.

У кого-нибудь есть понимание?

ОБНОВИТЬ

Мы обнаружили, что после создания нового плана на более высоком уровне (уровень S1, а не уровень S0) не было заметной задержки при пакетных вызовах. Само по себе это не решение, потому что это дает нам цену на продукт для производственных целей, но, возможно, исправление для других, пока не произойдут обновления, упомянутые в принятом ответе.

1 ответ

Решение

Этого и следовало ожидать в данный момент в режиме предварительного просмотра. Это скоро выйдет из предварительного просмотра и будет значительно быстрее.

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