0

我以前在边缘网关中运行了几个模块。该网关托管在标准 .net 框架 Windows 服务中,并且该模块只是实例化的对象。模块之间来回发送消息,只需在调试器中启动服务并执行我需要的任何操作都非常容易。

现在,edge 已经转移到以容器为中心的模型,您可以在其中将包含 .net 核心可执行文件的构建容器推送到 azure 容器存储,然后将这些容器部署到目标机器上正在运行的 docker 服务。我将部署工作到可以看到容器在我的开发机器上运行的位置,但我不知道应该如何在 Visual Studio 2017 中调试它们?我要附加到流程吗?如果我想一次调试 5 个模块以确保所有消息传递都按要求进行,该怎么办?

4

2 回答 2

1

只要提供正确的凭据,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 调试您的模块。

于 2017-12-22T23:08:25.917 回答
1

这里有一篇关于如何在 Visual Studio Code 中调试 C# 模块的帖子:https ://blogs.msdn.microsoft.com/visualstudio/2017/12/12/easily-create-iot-edge-custom-modules-with -视觉工作室代码/。请确保您在与部署目标相同的机器上进行调试。

于 2018-01-05T03:15:03.523 回答