ошибка подключения устройства к шлюзу IoT Edge

При подключении к пограничному шлюзу из смоделированного кода устройства возникает тайм-аут подключения со следующими исключениями:

'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientException' in Microsoft.Azure.Devices.Client.dll
    Exception thrown: 'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientException' in mscorlib.dll
    Exception thrown: 'System.AggregateException' in Microsoft.Azure.Devices.Client.dll
    Exception thrown: 'System.AggregateException' in mscorlib.dll
'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientException' in Microsoft.Azure.Devices.Client.dll
    Exception thrown: 'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientException' in mscorlib.dll
    Exception thrown: 'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientTransientException' in Microsoft.Azure.Devices.Client.dll
    Exception thrown: 'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientTransientException' in mscorlib.dll
    Exception thrown: 'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientTransientException' in Microsoft.Azure.Devices.Client.dll

Я добавляю ConnectionString в правильном формате, а также включаю GatewayHostName, настроенный из https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gateway


person kalyan kumar    schedule 11.01.2018    source источник
comment
Я могу проверить связь с именем пограничного хоста, которое я настроил, и добавил его в строку подключения устройства GatewayHostName .. А также я открыл исходящий 8883 с моего ноутбука-симулятора устройства IoT. Также у пограничного шлюза есть входящие порты 8883 и 1883.   -  person kalyan kumar    schedule 15.01.2018
comment
Невозможно создать идентификатор для clientId myFirstDevice и имени пользователя mygateway.gateway.com/myFirstDevice/api-version=2017-06-30&DeviceClientType=Microsoft.Azure.Devices.Client%2F1.6.0%20%28.NET%20Framework%204.7.2600.0 % 3B% 20Microsoft% 20Windows% 2010.0.16299% 3B% 20X86% 29% 20HappyPath_Simulated-CSharp 2018-01-16 03: 58: 18.929 +05: 30 [INF] - ClientNotAuthenticated, идентификатор клиента: myFirstDevice; Имя пользователя: mygateway.gateway.com/myFirstDevice/api-version=2017-06-30&DeviceClientType=Microsoft.Azure.Devices.Client   -  person kalyan kumar    schedule 15.01.2018
comment
приведенный выше журнал edgeHub, запущенный на моем рабочем столе Windows, в то время как код устройства IoT пытается подключиться с ноутбука с Windows 10 ..   -  person kalyan kumar    schedule 15.01.2018
comment
Эта ошибка указывает на то, что аутентификация, выполненная Edge Hub для IoT Hub от имени устройства, не удалась. Можете ли вы напрямую подключиться к Центру Интернета вещей с устройства, если отбросите свойство GatewayHostName в строке подключения?   -  person Raj    schedule 16.01.2018
comment
@Raj Да, я смогу подключиться к Центру Интернета вещей, если отключу GatewayHostName.   -  person kalyan kumar    schedule 17.01.2018


Ответы (1)


Статья Создание устройства IoT Edge, которое действует как прозрачный шлюз - предварительный просмотр работает нормально. Ключ к тому, чтобы это работало, - установить правильные сертификаты.

В следующем сценарии и клиент, и граница находятся на одном компьютере.

  1. Следуйте этому документу, у меня есть следующие файлы сертификатов:  введите описание изображения здесь

Обратите внимание, что я использовал New-CACertsEdgeDevice myEdgeDevice для создания сертификата устройства.

  1. Затем выполните следующую команду, чтобы настроить пограничную среду выполнения.

iotedgectl setup --connection-string HostName = jierong-iothub.azure-devices.net; DeviceId = jierong-iotedge-device1; SharedAccessKey = XXXXXXX --edge-hostname localhost --device-ca-cert-file myEdgeDevice- public.pem --device-ca-chain-cert-file myEdgeDevice-all.pem --device-ca-private-key-file myEdgeDevice-private.pem --owner-ca-cert-file RootCA.pem

  1. Затем запустите iotedgectl start, чтобы запустить среду выполнения, и запустите docker ps, чтобы убедиться, что все в порядке.

введите здесь описание изображения

  1. Удалите все установленные сертификаты и установите файл myEdgeDevice.pfx, дважды щелкнув его. После этого вы можете увидеть следующие сертификаты в своем диспетчере сертификатов:

введите здесь описание изображения

  1. Затем создайте строку подключения устройства, как показано ниже, если вы используете локальный хост, не используйте имя компьютера, как показано ниже:

    частная константная строка DeviceConnectionString = "HostName = jierong-iothub.azure-devices.net; DeviceId = jierong-iothub-device; SharedAccessKey = XXXXXXXX; GatewayHostName = localhost";

Изменено приложение, клонированное следующим образом:

git clone https://github.com/Azure-Samples/iot-hub-dotnet-simulated-device-client-app.git

Я могу успешно запустить приложение. введите здесь описание изображения

Аналогично для пограничного сервера и клиента на двух разных машинах Win 10, но вы должны сначала установить сертификат, например, написать следующий код:

введите здесь описание изображения

Если он по-прежнему не работает, проверьте, не возникает ли у вас каких-либо проблем с проверкой сертификации, и вот как это работает:

  1. Среда выполнения Edge в контейнере докеров отправит left (deivce cerificate) во время рукопожатия TLS.
  2. клиент (в данном случае машина Win 10) должен будет подтвердить эту сертификацию, чтобы подтвердить ее как доверенную, мне нужно будет посмотреть на эмитента этого сертификата и подняться по цепочке и посмотреть, является ли этот эмитент в доверенном корневом ЦС.

Обратите внимание, что IoT Edge все еще находится в режиме предварительного просмотра, поэтому некоторые вещи не могут быть удалены. Если у вас все еще возникают проблемы, я предлагаю вам создать заявку в службу поддержки для дальнейшего устранения неполадок.

Спасибо, Джи

person jierong - msft    schedule 31.01.2018