Посмотрите на документ: Обработка прямого метода на устройстве .
ОБНОВЛЕНИЕ:
В следующих случаях показаны примеры всехответы на вызов прямого метода устройства с использованием 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 секунд.