Не удалось вызвать прямой метод модуля Azure IoT Edge
Я использую пограничный модуль IoT и зарегистрировал обратные вызовы методов.
SetMethodHandlerAsync и SetMethodDefaultHandlerAsync
но ни один никогда не называется...
Инициирование прямых звонков с портала Azure
Не удалось вызвать метод устройства: {"message":"Device {\"Message\":\"{\\"errorCode\\":404103,\\"trackingId\\":\\"126e3eef616c409385e73128aef94b21-G:17-TimeStamp: 23.08.2008 12:29:35 \\",\\" message \\ ": \\" Истекло время ожидания подключения устройства. \\",\\" info\\":{\\"Тайм-аут \\" \\ "\\ 00:00:10"},\\"timestampUtc\\" \\"2018-08-23T12:29:35.2214374Z\\"}\"\"ExceptionMessage\":\"\"} не зарегистрирован"}
От VsCode
Не удалось вызвать прямой метод: не найдено
Я скучаю, чтобы установить любую необходимую конфигурацию?
Существует ли соглашение об именах или путь, который нужно указать?
1 ответ
Похоже, что из кода VS вызывать метод для устройства вместо модуля, потому что он не требует ввода идентификатора модуля.
С портала Azure, это работает для меня.
Зарегистрируйте метод и осуществите обратный вызов метода:
static async Task Init()
{
AmqpTransportSettings amqpSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
ITransportSettings[] settings = { amqpSetting };
// Open a connection to the Edge runtime
ModuleClient ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings);
await ioTHubModuleClient.OpenAsync();
Console.WriteLine("IoT Hub module client initialized.");
await ioTHubModuleClient.SetMethodHandlerAsync("Write", WriteConsole, null);
Console.WriteLine("IoT Hub module Set Method Handler:WriteConsole.");
// Register callback to be called when a message is received by the module
await ioTHubModuleClient.SetInputMessageHandlerAsync("input1", PipeMessage, ioTHubModuleClient);
}
private static Task<MethodResponse> WriteConsole(MethodRequest methodRequest, object userContext)
{
return Task.Run( () => {
Console.WriteLine($"Write direct method called!");
return new MethodResponse(200);
});
}
Я получаю сообщение об ошибке "Превышено время ожидания подключения устройства" при остановке модуля с помощью следующей команды:
Stop-Service iotedge -NoWait
Ошибка с портала:
Но в вашем сообщении об ошибке есть "незарегистрированная" информация. Кажется, ваш модуль не подключен к пограничному устройству или не работает успешно.
Поэтому первое, что вам нужно сделать, это проверить журнал модуля и посмотреть, есть ли какая-либо ошибка. Используя следующую команду (замените имя вашего модуля вместо "TestDirectMethodModule"):
docker logs TestDirectMethodModule -f
Проверьте все запущенные модули, используя следующую команду:
iotedge list
Если все модули работают успешно, вы увидите следующий результат: