Из кода 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
Если все модули работают успешно, вы увидите следующий результат:
person
Rita Han
schedule
24.08.2018