Что происходит с вызовом прямого метода Azure IoT Hub, если нет обработчика - PullRequest
0 голосов
/ 17 июня 2019

Я использую Azure IoT Hub с клиентским приложением на C #.Я ввел новый вызов Direct Method на сервере, а также добавил обработчик в новую версию клиента.Но мне интересно, что случится со старыми клиентами, у которых нет обработчика для этого прямого метода, если я опубликую изменения в бэкенде.быть проигнорированным?Я пытался найти ответы на этот вопрос здесь, в SO и в других местах, но не смог найти никаких ответов.

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Он будет проигнорирован и вернет ошибку 501 вызывающей стороне.

1 голос
/ 17 июня 2019

Посмотрите на документ: Обработка прямого метода на устройстве .

ОБНОВЛЕНИЕ:

В следующих случаях показаны примеры всехответы на вызов прямого метода устройства с использованием REST POST:

https://xxxxxxxx.azure-devices.net/twins/myDevice6/methods?api-version=2018-06-30

полезная нагрузка:

{
  "methodName": "writeLine",
  "responseTimeoutInSeconds": 10,
  "payload": {
    "input1": 12345,
    "input2": "HelloDevice"
    }
}

Ответ 1: Устройство не подключено

{
  "Message": "{\"errorCode\":404103,\"trackingId\":\"e796f79f02094184ba375533dd522b62-TimeStamp:06/18/2019 06:08:11\",\"message\":\"Timed out waiting for device to connect.\",\"info\":{\"timeout\":\"00:00:00\"},\"timestampUtc\":\"2019-06-18T06:08:11.1216684Z\"}",
  "ExceptionMessage": ""
}

Ответ 2: Устройство подключено и не подписано

{
  "Message": "{\"errorCode\":404103,\"trackingId\":\"4d2c65b6fd994fc5adc902ecfade1877-G:3-TimeStamp:06/18/2019 06:11:52-G:11-TimeStamp:06/18/2019 06:11:52\",\"message\":\"Timed out waiting for device to subscribe.\",\"info\":{},\"timestampUtc\":\"2019-06-18T06:11:52.6039066Z\"}",
  "ExceptionMessage": ""
}

Ответ 3: Устройство подписано на другое имя метода, например $ iothub /method / POST / xyz / #

{
  "Message": "{\"errorCode\":404103,\"trackingId\":\"59df13ecc3a04d63b7a1813ed9e6187f-G:3-TimeStamp:06/18/2019 06:14:48-G:10-TimeStamp:06/18/2019 06:14:48\",\"message\":\"Timed out waiting for device to subscribe.\",\"info\":{},\"timestampUtc\":\"2019-06-18T06:14:48.110565Z\"}",
  "ExceptionMessage": ""
}

Ответ 4: Устройство подписано на конкретное имя метода, но нет ответа, например, $ iothub / Methods / POST / writeLine /#

{
  "Message": "{\"errorCode\":504101,\"trackingId\":\"1692ee301e344215945385b282fd0b78-G:3-TimeStamp:06/18/2019 06:16:48-G:12-TimeStamp:06/18/2019 06:16:48\",\"message\":\"Timed out waiting for the response from device.\",\"info\":{},\"timestampUtc\":\"2019-06-18T06:16:48.628664Z\"}",
  "ExceptionMessage": ""
}

Ответ 5: Устройство подписано на любое имя метода, но нет ответа, например, $ iothub / Methods / POST / #

{
  "Message": "{\"errorCode\":504101,\"trackingId\":\"7edc4ecfc095424c9a378a2e064bc886-G:3-TimeStamp:06/18/2019 06:59:24-G:16-TimeStamp:06/18/2019 06:59:24\",\"message\":\"Timed out waiting for the response from device.\",\"info\":{},\"timestampUtc\":\"2019-06-18T06:59:24.0184557Z\"}",
  "ExceptionMessage": ""
}

По сути, вашими делами могут быть Ответ 3. или Ответ 5.

Возможно, ваше клиентское приложение использует SDK Azure IoT C #, где MКласс QTTTransportHandler имеет свойство methodPostTopicFilter = "$ iothub / Methods / POST / #" , поэтому ваш ответ # 5 должен быть с errorCode = 504, но SDK устройства генерирует errorCode = 501 в качестве ответа для не реализованного обработчика (публикация по теме $ iothub / method / res / 501 /? $ rid = {requestId} ).

Обратите внимание, что время ответа определяется invoker, см. Свойство responseTimeoutInSeconds в теле полезной нагрузки.В случае ответа 3. Время ответа составляет ~ 5 секунд.

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