none
Umstellung AMQP auf AMQP Websockets RRS feed

  • Frage

  • Hallo Community,

    ich habe mal wieder ein Problem. Ich habe ein Iot Core App auf einem Raspberry Pi, die Werte über AMQP an einen Azure IoT-Hub sendet und empfängt. Leider bekomme ich in einem Kunden-Netzwerk Probleme mit dem AMQP Port und der Kunde möchte lieber über Port 443 kommunizieren.

    Jetzt kann man irgendwie auch AMQP über Websockets einrichten, dann würde auch Port 443 funktionieren.

    Kann mir jemand sagen, was ich alles machen muss, um die Kommunikation auf Websockets umzustellen?

    Nur den TransportType.Amqp auf TransportType.Amqp_Websocket_Only umzustellen funktionierte leider nicht. Dann kommt beim IoT-Hub nichts an.

    Vielen Dank.

    Sonntag, 17. Dezember 2017 13:48

Alle Antworten

  • Hallo,

    ich persönlich würde keine reservierten Port nutzen. Vor allem wo ist den der Unterschied welchen Port man benutzt und welchen man in der Firewall freigibt? Es sollte auch klar sein das die Kommunikation nicht sofort verschlüsselt ist nur weil man den Port 443 nutzt. Jede Kommunikation sollte den Port nutzen der dafür vorgesehen ist, damit der Admin allein an der Portnummer erkennen kann um was für eine Kommunikation es sich hier handelt. Das alles spart Dokumentation.

    Ich habe hier eine Anleitung gefunden die dir vielleicht helfen kann.

    Ich persönlich würde dem Kunden erklären warum die Ports 5671 und 5672 weiter dafür benutzt werden sollten


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Sonntag, 17. Dezember 2017 15:07
  • Hallo Thomas,

    leider geht der Kunde nicht darauf ein und besteht auf eine Verbindung über den Proxy mit Standard HTTP/HTTPS Ports.

    Ich habe aber keine Ahnung, wie man die Verbindung über die Web-Sockets aufbaut.

    Kann mir jemand dabei helfen?

    Gruß Marco

    Dienstag, 19. Dezember 2017 19:19
  • Wie und mit welcher SDK stellst Du die Verbindung her?

    Die Connect Methode der Azure IoT SDK müsste eigentlich 2 Parameter übernehmen. Mit dem letztern kann man das Protokoll festlegen. Siehe dazu in die Doku. Wenn Der Connect wirklich über HTTPS erfolgen soll, schau dir die Hinweise dazu an


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Dienstag, 19. Dezember 2017 20:55
  • Mein VB Code vorher:

    Dim myDeviceClient As DeviceClient = DeviceClient.Create(iotHubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(DeviceId, SasToken), TransportType.Amqp)
    

    der funktioniert, benutzt aber AMQP mit Port 5671 

    Mein VB Code nachher:

    Dim myDeviceClient As DeviceClient = DeviceClient.Create(iotHubUri, AuthenticationMethodFactory.CreateAuthenticationWithToken(DeviceId, SasToken), TransportType.Amqp_WebSocket_Only)
    

    der funktioniert nicht, bzw in meinem IoT-Hub kommt nichts an.

    Den iotHubUri und auch den SASToken holt er sich aus dem Device (Raspberry PI 3), dort ist TPM mit SoftwareToken eingestellt.

    Dienstag, 19. Dezember 2017 21:44
  • Es müsste noch einer weitere Methode geben CreateFromConnectionString

    Du musst dir die Doku durchlesen und dir die Samples anschauen. Keiner wird dir diese arbeit abnehmen


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App


    Dienstag, 19. Dezember 2017 21:48
  • CreateFromConnectionString hatte ich vorher auch schon mal, dann musste ich aber bei jedem Gerät einen anderen ConnectionString mit ins Programm laden.

    Wenn er sich die Connection aus dem Gerät selbst holt, dann konnte ich immer das gleiche Programm benutzen, und die ID und die Connection holt er sich aus dem Gerät. Das war schon wesentlich cooler.

    Die alternative wäre, den Connectionstring nicht ins Programm, sondern in einer Datei zu legen, die man dann austauschen könnte, anstatt jedes mal das Programm zu ändern.

    Wäre ein Versuch Wert. 

    Dienstag, 19. Dezember 2017 22:13
  • Also ich bin jetzt etwas schlauer, aber es funktioniert immer noch nicht.

    Eigentlich müsste die Umstellung von "AMQP" auf "AMQP over Websockets" problemlos funktionieren. Besser noch, sie wäre eigentlich gar nicht notwendig, denn wenn AMQP nicht funktioniert schaltet er automatisch auf Websockets um.

    So die Theorie.

    In der Praxis war es aber leider so, dass es bei einigen SDK Updates damit Probleme gab. Es sollte aber eigentlich mit den neusten SDK Versionen und Windows Update 16299 wieder funktionieren.

    Nur leider tut es das bei mir nicht!

    Die Fehlermeldungen:

    Exception thrown: 'Microsoft.Azure.Devices.Client.Exceptions.IotHubClientTransientException' in System.Private.CoreLib.dll

    Transient error occured, please retry.
    Timed out trying to create FaultTolerantAmqpObject`1

    Hat noch jemand eine Idee?


    • Bearbeitet MGrontzki Sonntag, 14. Januar 2018 15:03
    Sonntag, 14. Januar 2018 15:02