Пакетное геокодирование статуса карт Azure 202 12+ часов спустя - PullRequest
0 голосов
/ 19 декабря 2018

Я использую 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 ивызов GET с использованием кода ниже ...

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 Ответ

0 голосов
/ 19 декабря 2018

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

...