Azure IoT Hub GetNextAsTwinAsync после выполнения запроса идет исключение - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь запросить устройства в своем IoT-концентраторе Azure:

var query = registry.CreateQuery("SELECT * FROM devices where statusUpdateTime<=" + (rightnowUTC-tenMinAgoUTC ));
        while (query.HasMoreResults)
        {
            var page = await query.GetNextAsTwinAsync();
            Console.WriteLine("Devices con aggiornamento negli ultimi dieci minuti");
            foreach (var twin in page)
            {
                Console.WriteLine("Device id: " + twin.DeviceId + ", Connection state: " + twin.ConnectionState + ", Status: " +
                 twin.Status + ", Last activity time: " + twin.LastActivityTime + ", Status updated time: "+twin.StatusUpdatedTime);
            }
        }

Я проверил сам объект запроса и позволил циклу while выполняться.

Как только он перейдет к «GetNextAsTwinSync», будет возбуждено это исключение:

(Inner Exception #0) System.ArgumentException: {"Message":"ErrorCode:ArgumentInvalid;BadRequest","ExceptionMessage":"Tracking ID:b862e066a6944c9caf8f726aae82f80d-G:12-TimeStamp:07/10/2019 11:55:01"}
       at Microsoft.Azure.Devices.HttpClientHelper.ExecuteAsync(HttpClient httpClient, HttpMethod httpMethod, Uri requestUri, Func`3 modifyRequestMessageAsync, Func`2 isMappedToException, Func`3 processResponseMessageAsync, IDictionary`2 errorMappingOverrides, CancellationToken cancellationToken)
       at Microsoft.Azure.Devices.HttpClientHelper.PostAsync[T](Uri requestUri, T entity, IDictionary`2 errorMappingOverrides, IDictionary`2 customHeaders, MediaTypeHeaderValue customContentType, ICollection`1 customContentEncoding, CancellationToken cancellationToken)
       at Microsoft.Azure.Devices.HttpRegistryManager.ExecuteQueryAsync(String sqlQueryString, Nullable`1 pageSize, String continuationToken, CancellationToken cancellationToken)
       at Microsoft.Azure.Devices.Query.GetNextAsync(QueryOptions options)
       at Microsoft.Azure.Devices.Query.GetAndCastNextResultAsync[T](QueryResultType type, QueryOptions options)
       at Microsoft.Azure.Devices.Query.GetNextAsTwinAsync(QueryOptions options)
       at Microsoft.Azure.Devices.Query.GetNextAsTwinAsync()

1 Ответ

0 голосов
/ 11 июля 2019

Я рекомендую прочитать язык запросов IoT Hub для двойников, заданий и маршрутизации сообщений и устройств и модулей

Строка запроса неверна, и в этом причина System.ArgumentException .

Используйте следующую строку запроса:

string querystring = $"SELECT * FROM devices where statusUpdateTime <= '{(DateTime.UtcNow - TimeSpan.FromMinutes(10)).ToString("o")}'";

Обратите внимание, что форматы ISO 8601 настоятельно рекомендуются для типа данных datetime.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...