2012-06-26 3 views
3

누군가 InstanceInput 엔드 포인트를 사용하기위한 샘플 코드를 게시 할 수 있습니까? 샘플 WCF 서비스가 포트 8080Azure InstanceInput 엔드 포인트 사용

<Endpoints> 
    <InstanceInputEndpoint name="InstanceAccess" protocol="tcp" localPort="8080"> 
    <AllocatePublicPortFrom> 
     <FixedPortRange max="10105" min="10101" /> 
    </AllocatePublicPortFrom> 
    </InstanceInputEndpoint> 
</Endpoints> 

에서 수신하지만 10105에 포트 중 10101를 사용하여 외부 소비자에서이 WCF 서비스에 액세스 할 수 없습니다 경우 나는 작업자 역할에 아래의 구성을 사용했다. 우리는 Azure 서비스의 공용 DNS 이름을 주어진 범위의 공용 포트와 함께 사용해야합니까?

또한 작업자 역할 OnStart() 메서드 내에서이 끝점 정보에 액세스 할 수 없었습니다. 나는 RoleEnvironment.CurrentRoleInstance.InstanceEndpoints [ "InstanceAccess"]를 사용했다. 그러나 RoleInstanceEndpoint를 반환하지는 않습니다. 내가 여기서 뭔가를 놓치고 있니?

+0

Azure Cmopute 에뮬레이터는 현재 InstanceInputEndpoint를 지원하지 않으므로 실제로 로컬 테스트 할 수는 없다고 생각합니다. Azure에 응용 프로그램을 배포하면 모든 것이 제대로 작동하는 것 같습니다. – Robar

답변

0

Here은 Azure InstanceInput 끝점을 사용하고 작업자 역할에 WCF 서비스를 호스팅하는 샘플 Visual Studio 솔루션입니다. 각 개별 인스턴스에서 실행되는 WCF 서비스는 Azure DNS 이름과 해당 인스턴스에 매핑 된 공용 포트를 사용하여 액세스 할 수 있습니다. 다음 끝점 구성을 사용했습니다.

<Endpoints> 
     <InstanceInputEndpoint name="Endpoint1" protocol="tcp" localPort="10100"> 
     <AllocatePublicPortFrom> 
      <FixedPortRange max="10110" min="10106" /> 
     </AllocatePublicPortFrom> 
     </InstanceInputEndpoint> 
    </Endpoints> 

이 엔드 포인트

어떻게 든 WorkerRole (ONSTART 모두() 및 실행() 메소드) 내에서 액세스 할 수 없습니다이었다. 그래서 나는 'localhost'를 사용했다.

string endpointIP = "localhost:10100"; 

    if (RoleEnvironment.CurrentRoleInstance.InstanceEndpoints.Keys.Contains("Endpoint1")) 
    { 
     IPEndPoint externalEndPoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["Endpoint1"].IPEndpoint; 
     endpointIP = externalEndPoint.ToString(); 
    } 

또한이 솔루션은 이러한 개별 WCF 서비스를 호출 할 호스트 DNS 이름을 사용하는 콘솔 클라이언트가 포함되어 있습니다.

+0

compute 에뮬레이터에서 링크 된 솔루션을 테스트 할 때 처음으로 AddressAlreadyInUseException이 발생한 후 작업자 역할의 인스턴스. 에뮬레이터가 호스팅 시스템의 사용 가능한 포트에 바인딩하는 경우 예상됩니다. – icelava

관련 문제