0

从模拟设备代码连接到边缘网关时,面临连接超时,但有以下异常:

'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,还包括从https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gateway配置的 GatewayHostName

4

1 回答 1

0

文章创建充当透明网关的 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. 然后构造你的设备连接字符串,如果你使用本地主机,不要使用机器名,如下所示:

    private const string 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. docker 容器中的边缘运行时将在 TLS 握手期间发送左(设备证书)。
  2. 客户端(本例中为 Win 10 机器)将必须验证此证书,以验证此证书是否受信任,我将不得不查看此证书的颁发者并上链查看此颁发者是否在受信任的根 CA 中。

请注意,IoT Edge 仍处于预览模式,因此可能无法清除某些内容。如果您仍然遇到一些问题,我建议您创建支持票以进行进一步的故障排除。

谢谢,杰

于 2018-01-31T09:46:17.397 回答