エッジハブは、適切な資格情報が提供されている限り、誰がそれに電話をかけているかは実際には気にしません。発信者は、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からモジュールをデバッグできるはずです。
出典
2017-12-22 23:08:25
Raj
私は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} –
これで問題が解決した場合、あなたは答えとしてこれをマークしてくださいだろうか?ありがとう。 – Raj