問題の内容と、上記のコードを追加してこの問題を解決し、他の人の利益になる理由を説明したいと思います。
worker ロールでは、任意の TCP エンドポイントと任意のポート番号を構成します。この VM が起動すると、VM はこのポートを使用するようにプロビジョニングされ、このポートへのアクセスを提供するための例外としてファイアウォールが含まれます。Azure VM を起動する準備が整うまでに、TCP/IP アドレスが既にあり、構成されたポートが有効になっています。
役割が開始され、このポートにアクセスする必要があるサービスまたはアプリケーションがある場合は、本当に必要です。
たとえば、ワーカー ロールで Tomcat/Java を構成している場合、構成済みのポートに TCP リスナーを作成する必要があります。これは、ワーカー ロールが次のように開始されたときに実行できます。
- 現在のロール インスタンスの IP アドレスとポート番号を取得する
- TCP リスナーを作成し、この IP アドレスとポートから開始します
- ステップ 1) と 2) を実行するコードをワーカー ロールの OnStart() 関数に追加します。
コードは次のようになります。
TcpListener TomcatPortListener = new TcpListener(RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["TomcatWeb80"].IPEndpoint);
TomcatPortListener.Start();
あなたの場合、IPアドレスとポート番号を取得したのとまったく同じことを行い、IP /ポートを使用してソケットアドレスからエンドポイントを作成しました。
RoleInstanceEndpoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["TCPin"];
IPEndPoint localEndPoint = new IPEndPoint(externalEndPoint.IPEndpoint.Address, externalEndPoint.IPEndpoint.Port);
localEndPoint.Create();
これは、TCP エンドポイントを作成する Web ロールまたはワーカー ロールの必須設定です。