我之前在Edge网关中运行了几个模块。该网关托管在标准的.net框架Windows服务中,模块只是实例化的对象。模块相互之间来回发送消息,只需在调试器中启动服务并执行我需要的任何操作即可。
现在,edge已转移到以容器为中心的模型,您可以将包含.net核心可执行文件的构建容器推送到azure容器存储,然后将这些容器部署到目标计算机上正在运行的docker服务。我有部署工作,我可以看到容器在我的开发机器上运行,但我不知道我应该如何在Visual Studio 2017中调试它们?我是否附加到流程?如果我想一次调试5个模块以确保所有消息传递都按照需要进行,该怎么办?
答案 0 :(得分:1)
EdgeHubConnectionString
值。
现在,不幸的是,Azure门户(或Azure CLI)不支持获取模块凭据,您需要构建连接字符串以连接到Edge Hub。对此的支持应该很快就会到来。
与此同时,您可以通过正常方式进行部署(即通过门户中的“设置模块”并让Edge Agent为您部署容器)来解决此问题,然后运行以下命令(或类似的东西)从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调试模块。
答案 1 :(得分:1)
有一篇文章讨论如何在Visual Studio Code中调试C#模块:https://blogs.msdn.microsoft.com/visualstudio/2017/12/12/easily-create-iot-edge-custom-modules-with-visual-studio-code/。请确保您在与部署目标相同的计算机上进行调试。