带有下游设备的物联网边缘网关
我已经创建了一个在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
以上是 带有下游设备的物联网边缘网关 的全部内容, 来源链接: utcz.com/qa/260314.html