2017-12-13 10 views
0

C#에서 Azure Cloud Service TCP 수신기를 만들었으므로 이제 로컬에서 디버깅하려고합니다. 아래의 서비스 정의는 내가 관심있는 포트를 노출하지만, 로컬에서 실행될 때 주소는 localhost으로 연결되며, 이는 동일한 네트워크의 다른 장치에는 보이지 않습니다.Azure Compute Emulator에 외부 포트 노출

<?xml version="1.0" encoding="utf-8"?> 
<ServiceDefinition name="Foo.Listener.Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6"> 
    <WorkerRole name="Foo.Listener" vmsize="Small"> 
    <ConfigurationSettings> 
     <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" /> 
    </ConfigurationSettings> 
    <Endpoints> 
     <InputEndpoint name="Foo Protocol" protocol="tcp" port="9100" localPort="9100" /> 
    </Endpoints> 
    </WorkerRole> 
</ServiceDefinition> 

나는 다음과 같은 명령으로 포트 프록시를 추가하는 시도 :

netsh interface portproxy add v4tov4 listenport=9100 connectaddress=localhost connectport=9100 protocol=tcp 

그러나, 계산 에뮬레이터 나는이 작업을 수행 할 때 포트 번호 9100가 사용 생각하는 것, 그리고 그것은 9101을 선택 대신. 내 작업자 역할을 로컬로 실행하고 외부 연결을 허용 할 수 있습니까?

답변

0

작업자 역할을 확인하여이 작업을 관리 할 수있었습니다. 그것은 꽤 아니지만 코드를 통하는 것보다는 구성을 통해이 작업을 수행하는 것이 훨씬 더 좋을 것입니다. 그러나 여기 내 해결책이 있습니다 :

IEnumerable<IPEndPoint> endpoints; 

if (RoleEnvironment.IsEmulated) 
{ 
    endpoints = Dns.GetHostEntry(Dns.GetHostName()) 
     .AddressList 
     .Select(address => new IPEndPoint(address, 9100)); 
} 
else 
{ 
    endpoints = RoleEnvironment.CurrentRoleInstance 
     .InstanceEndpoints 
     .Select(endpoint => endpoint.Value.IPEndpoint); 
}