2012-03-27 2 views
0

내 Azure 앱이 여러 개의 TCP 포트에 바인딩되는 여러 ZeroMQ 소켓을 호스팅합니다. 로컬에서 개발했을 때 제대로 작동했지만 Azure에 업로드 한 후에는 액세스 할 수 없었습니다. 안타깝게도 Azure ServiceDefinition에 포트를 추가 한 후 (로컬로 앱을 시작할 때마다 하늘빛으로 업로드 된 액세스를 허용하기 위해) 이미 사용중인 포트에 대해 불만을 표시합니다. 내 생각에 그것은 하늘 동작을 미러링하는 (디버그/로컬)로드 밸런서와 관련이있다. 내가 잘못했거나 예상 된 동작입니까? 후자가 사실이라면, 이런 상황을 어떻게 처리 할 수 ​​있습니까? 나는 소켓에 대해 다른 포트를 사용할 수 있고 엔드 포인트에서 개인 포트로 지정할 수 있다고 생각하지만 이는 해결 방법과 비슷합니다. & 감사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 주소에서 수신하지 않고 포트를 열려고하면 여러 인스턴스간에 충돌이 발생할 수 있습니다. 예를 들어, 그들은 모두 12755.0.0:555555와 127.0.0.3:5555 중 하나를 여는 대신 5555 포트를 열려고합니다.

+0

하나의 인스턴스 만 실행 중이므로 문제가되지 않습니다. :) – Pharao2k