• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

带有下游设备的物联网边缘网关

azure 来源:Evan Nielsen 12次浏览

我已经创建了一个在Docker中运行的Azure IoT边缘网关,该网关带有一个自定义模块,它只是一个传递(接收消息并向上游发送)。带有下游设备的物联网边缘网关

我创建了一个简单的.net控制台应用程序向网关发送消息,以便对其进行评估。

这是我在控制台应用程序中的代码。

DeviceClient client = 
      DeviceClient.CreateFromConnectionString("HostName=<my iot hub in azure>.azure-devices.net;DeviceId=<the name of the device>;SharedAccessKey=<my access key>;GatewayHostName=<the name of the IoT Edge Device>"); 

     Message message = new Message(); 

     message.Properties.Add("testproperty", "test"); 

     client.SendEventAsync(message).Wait(); 

看起来,当调用SendEventAsync方法时,它会挂起forerver。我等了5分钟,应用程序停滞不前。如果我从连接字符串中删除GatewayHostName,它会立即执行,并且我的消息直接发送到Azure中的IoT Hub。

为什么它不会将消息发送到物联网边缘网关?


===========解决方案如下:

client.SendEventAsync调用隐式地尝试打开到服务器的连接(在本例中为IoT Edge网关),该连接无法完成,这就是您看到呼叫挂起的原因。

而且我觉得这个问题是在连接字符串中 – “主机名= .azure-devices.net; DEVICEID =; SharedAccessKey =; GatewayHostName =

这里GatewayHostName不是 ,而是运行模块的物理设备(fqdn主机名,如果可用)的主机名。 所以连接字符串应该是这样的 – “主机名= .azure-devices.net; DEVICEID =; SharedAccessKey =; GatewayHostName =

如果您的代码自定义模块中执行,那么你就可以只需使用环境变量$ EdgeHubConnectionString,它应该包含可以使用的连接字符串。

如果它是下游设备,那么随着使用正确的连接字符串,还需要确保设备信任用于接受网关设备连接的证书。你可以在这里找到更多的信息 – https://docs.microsoft.com/en-us/azure/iot-edge/how-to-create-transparent-gateway


版权声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。
喜欢 (0)