2012-03-27 7 views
0

Meine Azure-App hostet mehrere ZeroMQ-Sockets, die an mehrere TCP-Ports gebunden sind. Es funktionierte gut, als ich es lokal entwickelte, aber sie waren nicht zugänglich, sobald sie nach Azure hochgeladen wurden. Leider, nachdem ich die Ports der Azure ServiceDefinition hinzugefügt habe (um den Zugriff nach dem Hochladen auf azurblau zu ermöglichen), beschwert es sich jedes Mal, wenn ich die App lokal starte, dass die Ports bereits verwendet werden. Ich denke, es hat mit dem (debug/local) Load Balancer zu tun, der das azurblaue Verhalten widerspiegelt. Habe ich etwas falsch gemacht oder ist das erwartete Verhalten? Wenn letzteres wahr ist, wie geht man mit dieser Art von Situation um? Ich denke, ich könnte verschiedene Ports für die Sockets verwenden und sie als private Ports in den Endpunkten angeben, aber das ist eher eine Art Workaround.Azure InputEndpoints blockieren meine TCP-Ports

Dank & Grüße

Antwort

2

Die Endpunkte, die Sie hinzufügen (in Ihrem Fall tcp), werden extern mit der von Ihnen angegebenen Portnummer angezeigt. Sie können diese Endpunkte gewaltsam bestimmten Ports zuordnen oder sie dynamisch zuweisen lassen. Dazu müssen Sie die RoleEnvironment für den zugewiesenen internen Port fragen.

Wenn Sie zum Beispiel einen Eingangs Endpunkt genannt erstellt „ZeroMQ“ Sie den Hafen entdecken würde mit so etwas zu verwenden, ob die Ports gewaltsam abgebildet wurden oder einfach lassen sie dynamisch zugeordnet bekommen:

var zeromqPort = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["ZeroMQ"].IPEndpoint.Port; 
+0

Der Code gibt den gleichen Port zurück (5555 in meinem Fall), wie er als externer Port eingegeben wurde und führt daher auch zu einer Ausnahme: |. – Pharao2k

0

Versuchen Sie, die Ports die Umweltberichte verwenden, die Sie verwenden sollten. Ich denke, sie unterscheiden sich von den externen Ports, wenn sie den Emulator verwenden. Die Ports können von der ServiceEnvironment abgerufen werden.

+0

ServiceEnvironment == Rollenumgebung? – Pharao2k

+0

Ja, genau was David dachte. Haben Sie die localPort-Option in Ihrer Dienstkonfiguration festgelegt? – 02strich

0

Führen Sie mehr als eine Instanz der Rolle aus? Im Computeremulator werden die internen Endpunkte für verschiedene Rolleninstanzen derselbe Port unter verschiedenen IP-Adressen sein. Wenn Sie versuchen, den Port nur zu öffnen, ohne eine bestimmte IP-Adresse abzuhören, wird wahrscheinlich ein Konflikt zwischen mehreren Instanzen auftreten. (Z. B. versuchen alle, Port 5555 zu öffnen, statt einer Öffnung 127.0.0.2:5555 und einer Öffnung 127.0.0.3:5555.)

+0

Ich führe nur eine Instanz aus, also sollte das nicht das Problem sein :) – Pharao2k