2017-12-13 3 views
0

Ich habe einen Azure Cloud Service-TCP-Listener in C# erstellt, und jetzt versuche ich, es lokal zu debuggen. Die folgende Servicedefinition macht den Port verfügbar, an dem ich interessiert bin. Wenn sie jedoch lokal ausgeführt wird, ist die Adresse an localhost gebunden, die für andere Geräte im selben Netzwerk nicht sichtbar ist.Verfügbarmachen eines Ports extern in 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> 

Ich habe versucht, eine Port-Proxy mit dem folgenden Befehl hinzufügen:

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

Allerdings scheint die Compute Emulator die Portnummer 9100 in Gebrauch ist zu denken, wenn ich dies tun, und es wählt 9101 stattdessen. Wie kann ich meine Worker-Rolle lokal ausführen und zulassen, dass externe Verbindungen akzeptiert werden?

Antwort

0

Ich habe es geschafft, dies funktioniert durch Hinzufügen eines Schecks in der Worker-Rolle. Es ist nicht schön, und ich würde viel lieber durch Konfiguration als durch Code getan haben, aber hier ist meine Lösung:

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); 
} 
Verwandte Themen