2017-12-22 7 views
0

以前はエッジゲートウェイ内でいくつかのモジュールを実行していました。そのゲートウェイは、標準の.netフレームワークのWindowsサービスでホストされ、モジュールはインスタンス化されたオブジェクトでした。モジュールはお互いにメッセージをやりとりし、デバッガでサービスを開始して必要なものを実行するのは非常に簡単でした。新しいコンテナ中心のパラダイムで複数のIoT Edgeモジュールをデバッグするにはどうすればよいですか?

エッジがコンテナ中心のモデルに移動しました。ここでは、.netコア実行可能ファイルを含むビルドされたコンテナを空のコンテナストアにプッシュし、ターゲットマシン上の実行中のドッカーサービスに展開されます。私はデベロッパーマシン上でコンテナが動作しているのがわかる場所へのデプロイメントを行っていますが、Visual Studio 2017でどのようにデバッグするのか分かりません。私はプロセスにアタッチしますか?一度に5つのモジュールをデバッグして、すべてのメッセージの受け渡しが必要な場合はどうすればいいですか?

答えて

1

エッジハブは、適切な資格情報が提供されている限り、誰がそれに電話をかけているかは実際には気にしません。発信者は、Dockerコンテナ内、ホ​​スト上の別のプロセスまたはダウンストリームデバイス内にある可能性があります。したがって、開発中にVisual Studioを使用する場合は、簡単にF5(起動デバッガ)モジュールプロジェクトを作成し、Edge Hubと接続して通信する必要があります。あなたはそれが適切な文脈を提供していることを確認する必要があります。たとえば、EdgeHubConnectionStringの値が正しく設定されるように、VSデバッグ設定を設定する必要があります。

残念ながら、Azureポータル(またはAzure CLI)は、Edge Hubに接続するために接続文字列を構築するために必要なモジュール認証情報を取得する機能を備えていません。これについてのサポートはすぐに到着するはずです。

一方、通常の方法で(つまり、ポータルの[モジュールの設定]を使用して、Edge Agentでコンテナを展開して)展開を行い、次のコマンドを実行して回避することができます

docker inspect               \ 
    --format='{{range $e := .Config.Env}}{{printf "%s\n" $e}}{{end}}' \ 
    YourContainerName |            \ 
    grep EdgeHubConnectionString |          \ 
    cut -c 25- 

が、モジュール/コンテナの名前で上記のコマンドでYourContainerNameを置き換えます)bash端末からの接続文字列の値を印刷します。

さらに、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からモジュールをデバッグできるはずです。

+0

私はpowershellを使用し、後でこのスレッドに来るのを助けるために、私はこのコマンドを実行してRajが言及した環境文字列を取得しました:\t docker ps | \t \t%{$ _ -Replace '\ s \ s +'、 '、'} | \t \t ConvertFrom-Csv | \t \t Select-Object -Property *、@ { \t \t \t名前= "環境"; \t \t \t式= { \t \t \t \tドッキングウィンドウは、$ _を調べる "コンテナID"。| \t \t \t \t convertfrom-json | \t \t \t \t% { \t \t \t \t \t $ハッシュ\t = @ {}。 \t \t \t \t \t foreachの($ _で$ライン。Config.Env) \t \t \t \t \t { \t \t \t \t \t \t $トークン= $ライン-split '='、2 \t \t \t \t \t \t $ハッシュ "$($トークン[0])" = $トークン[1] \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t \t [PSCustomObject] $ハッシュ \t \t \t \t} \t \t \t} \t \t} –

+0

これで問題が解決した場合、あなたは答えとしてこれをマークしてくださいだろうか?ありがとう。 – Raj

1

Visual StudioコードでC#モジュールをデバッグする方法については、こちらの記事を参照してください。https://blogs.msdn.microsoft.com/visualstudio/2017/12/12/easily-create-iot-edge-custom-modules-with-visual-studio-code/デプロイターゲットと同じマシンでデバッグしていることを確認してください。

+0

VSコードは完全なVS 2017に匹敵するものではありません。私はそれを使用しません。より具体的に質問を編集します。 –

関連する問題