2012-03-27 2 views
0

私のAzureアプリケーションは複数のTCPポートにバインドする複数のZeroMQソケットをホストします。 ローカルで開発したときはうまくいきましたが、一度Azureにアップロードするとアクセスできなくなりました。 残念ながら、Azure ServiceDefinitionにポートを追加した後(ローカルにアプリケーションを起動するたびに、azureにアップロードされたアクセスを許可するため)、すでに使用中のポートについて不平を言います。私はそれが空白の動作をミラーリングする(デバッグ/ローカル)ロードバランサと関係していると思います。 私は何か間違ったことをしましたか?後者が真実ならば、このような状況をどのように扱うのでしょうか?私は、ソケットのための異なるポートを使用し、それらをエンドポイントのプライベートポートとして指定することができたと思いますが、それは回避策のように感じます。 &よろしくAzure InputEndpointsは私のtcpポートをブロックします

答えて

2

追加するエンドポイント(ケースのtcp)は、指定したポート番号で外部に公開されます。これらのエンドポイントを強制的に特定のポートにマッピングすることも、それらを動的に割り当てることもできます。そのため、割り当てられた内部使用ポートについてRoleEnvironmentに問い合わせる必要があります。

たとえば、あなたが呼ばれる入力エンドポイントを作成、場合「ZeroMQを、」あなたは、ポートを強制的にマッピングされたかどうか、このようなものを使用するポートを発見するだろうか、あなたは、単にそれらを動的にマッピングされましょう:

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

コードは、外部ポートとして入力されたのと同じポート(私の場合は5555)を返します。したがって、例外も発生します。 – Pharao2k

0

おかげで、環境は、あなたが使うべき報告ポートを使用するようにしてください。エミュレータを使うときは、外部のポートとは違うと思います。ポートはServiceEnvironmentから取得できます。

+0

ServiceEnvironment == RoleEnvironment? – Pharao2k

+0

はい、ダビデが思っただけです。あなたのサービス設定でlocalPortオプションを設定しましたか? – 02strich

0

ロールのインスタンスを複数実行していますか?計算エミュレータでは、異なるロールインスタンスの内部エンドポイントは、異なるIPアドレス上の同じポートになります。特定のIPアドレスでリッスンすることなくポートを開こうとすると、複数のインスタンス間で競合が発生する可能性があります。 (例:ポート5555を開こうとしているのは、127.0.0.2:5555の1つのオープニングと127.0.0.3:5555の1つのオープニングではなく)。

+0

私は1つのインスタンスしか実行していないので、問題ではありません。 – Pharao2k

関連する問題