只要提供正确的凭据,Edge Hub 并不真正关心谁在调用它。调用者可能在 Docker 容器中、主机上的另一个进程中或下游设备中。因此,在开发过程中,使用 Visual Studio 时,您应该可以简单地F5(启动调试器)您的模块项目并让它与 Edge Hub 连接和通信。您只需要确保为它提供正确的上下文。例如,您可能必须设置 VS 调试设置,以便EdgeHubConnectionString
正确设置值。
但不幸的是,目前 Azure 门户(或 Azure CLI)不支持获取模块凭据,您需要构建连接字符串以连接到 Edge Hub。对此的支持应该很快就会到来。
同时,您可以通过以正常方式进行部署(即通过门户中的“设置模块”并让边缘代理为您部署容器)来解决此问题,然后从bash
终端运行以下命令(或类似命令)打印连接字符串的值:
docker inspect \
--format='{{range $e := .Config.Env}}{{printf "%s\n" $e}}{{end}}' \
YourContainerName | \
grep EdgeHubConnectionString | \
cut -c 25-
在上面的命令中替换YourContainerName
为您的模块/容器的名称。
除此之外,您还希望在连接到 Edge Hub 时跳过 TLS 证书验证。这是因为在您的 PC 上运行时,它未设置为信任 Edge Hub 使用的服务器证书。您可以使用以下代码段跳过模块中的证书验证:
var mqttSetting = new MqttTransportSettings(TransportType.Mqtt_Tcp_Only);
mqttSetting.RemoteCertificateValidationCallback =
(sender, certificate, chain, sslPolicyErrors) => true;
ITransportSettings[] settings = { mqttSetting };
DeviceClient deviceClient =
DeviceClient.CreateFromConnectionString(connectionString, settings);
在此之后,您应该能够从 VS 调试您的模块。