2016-06-24 33 views
0

Ich habe eine Azure-Worker-Rolle implementiert, die ein paar geplante Aufgaben als Teil eines Integrationssystems ausführt. Ich versuche, einen HTTP-Endpunkt verfügbar zu machen, der einige administrative Funktionen bereitstellen wird, so dass ich Aspekte der Worker-Rolle remote steuern kann.Nancy-Selbsthost in der Azure-Worker-Rolle

Ich habe die Arbeit Rolle und läuft das einzige Problem ist, dass ich nicht in der Lage, HTTP-Endpunkt aus dem Internet zugreifen kann.

Ich habe bestätigt, dass der Nancy-Server läuft, seit ich remote auf der VM bin ich in der Lage, eine Verbindung mit der lokalen IP-Adresse herzustellen.

Die Rolle Config ist wie folgt:

<ServiceDefinition name="Azure" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6"> 
<WorkerRole name="Host.Azure" vmsize="Small"> 
<ConfigurationSettings> 
    <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" /> 
</ConfigurationSettings> 
<Startup> 
    <Task commandLine="mount.cmd" executionContext="limited" taskType="background"> 
    </Task> 
</Startup> 
<Endpoints> 
    <InputEndpoint name="http" protocol="http" port="80" localPort="80" /> 
</Endpoints> 
<LocalResources> 
</LocalResources> 
<Imports> 
    <Import moduleName="RemoteAccess" /> 
    <Import moduleName="RemoteForwarder" /> 
</Imports> 
</WorkerRole> 
</ServiceDefinition> 

ich ab und bat ihn url erschaffe wie folgt:

var endpointName = "http"; 
var instance = RoleEnvironment.CurrentRoleInstance; 
var internalEndpoint = instance.InstanceEndpoints[endpointName]; 
var uri = new Uri($"{internalEndpoint.Protocol}://{internalEndpoint.IPEndpoint}"); 
return new NancyUri {Value = uri}; 

Gibt es etwas anderes, was ich brauche t o tun diese Arbeit zu bekommen?

+0

Ihre Uri-Konstruktion sieht verdächtig aus, da Sie '.Protocol' greifen. Es gibt Eigenschaften unter '.IPEndpoint', die Sie wahrscheinlich verwenden möchten (ich kann mich im Moment nicht an Einzelheiten erinnern). –

Antwort

0

Es hatte mit der Windows-URL-ACL-Konfiguration zu tun. Ich dachte, weil ich die lokale IP-Adresse an den Nancy-Host liefern würde, würde es funktionieren, aber ich musste am Ende einen Eintrag zu der http acl hinzufügen.

Nancy URL wird wie dieses

var uri = new Uri("http://localhost:80"); 
return new NancyUri {Value = uri}; 

ich Setup eine Aufgabe den folgenden Befehl aufgebaut laufen

netsh http add urlacl url="http://+:80/" user="Everyone" 

Welche Referenz in der csdef Datei wie folgt:

<Task commandLine="network.cmd" executionContext="elevated" taskType="background"></Task>