2017-02-24 5 views
2

so habe ich ein Problem beim Erstellen eines Service Localy, für meine App als WebJob. Es scheint, als ob ich alles Google lesen würde, aber ich kann die Lösung nicht finden. This one here zählt für mich nicht, weil es um Authentifizierung geht.Azure WebJob Zugriff verweigert

So habe ich eine C# -Konsolenanwendung auf meinem PC mit vielen Referenzen, ddls und viele Berechnungen, die wie ein Service läuft. Hauptfunktion, sieht wie folgt aus:

static void Main(string[] args) 
    { 
     string baseAddress = "http://127.0.0.1:80"; 
     Console.WriteLine(baseAddress); 
     if (args.Count() > 0 && !string.IsNullOrEmpty(args[0])) 
      baseAddress = args[0]; 
     SelfHostServer server = new SelfHostServer();   //using Microsoft.Owin; 
     server.Start(baseAddress); 
    } 

Dann habe ich eine NodeJS Anwendung veröffentlicht am Azure AppService. Basically, ich brauche es, um C# -Dienst anzurufen und eine Antwort mit Ergebnis zu erhalten. Aus diesem Grund versuche ich einen WebJob mit meiner C# App zu erstellen. Ich veröffentliche es und versuchen, es zu laufen, aber ich bekommen (dieser Fehler ist flom azur Portal-Konsole):

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Net.HttpListenerException: Access is denied 
    at System.Net.HttpListener.SetupV2Config() 
    at System.Net.HttpListener.Start() 
    at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(HttpListener listener, Func`2 appFunc, IList`1 addresses, IDictionary`2 capabilities, Func`2 loggerFactory) 
    at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(Func`2 app, IDictionary`2 properties) 
    --- End of inner exception stack trace --- 
    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) 
    at Microsoft.Owin.Hosting.ServerFactory.ServerFactoryAdapter.Create(IAppBuilder builder) 
    at Microsoft.Owin.Hosting.Engine.HostingEngine.StartServer(StartContext context) 
    at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context) 
    at Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions options) 
    at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.StartImplementation(IServiceProvider services, StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.Start(StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.Start[TStartup](StartOptions options) 
    at Avilda.Klevas.Core.Server.SelfHostServer.Start(String baseAddress) 
    at klevas.webapistart.Program.Main(String[] args) 

Es sieht aus wie es ein Problem mit Port, aber ich kann keine richtige anywere finden. Ich bin in der Lage, andere exe zu laufen, aber nicht derjenige, der mit zuhört. Es ist mir egal, ob C# App von außen nicht erreichbar ist, ich möchte nur, dass diese beiden miteinander kommunizieren. Irgendwelche Ideen? Oder vielleicht andere Lösungen (außer VM)?

+0

Ich habe es geschafft, diesen Fehler lokal auf meinem Computer jetzt zu bekommen. Und dann löste es Visual Studio als Administrator. IDK, vielleicht gibt es eine Möglichkeit, WebJob als Administrator auszuführen? – Shpooke

Antwort

2

Wie folgendes Dokument notiert jede App sieht eine "private" Loopback-Verbindung; App "A" kann nicht auf einen lokalen Loopback-Socket hören, der von App "B" eingerichtet wurde.

Operating system functionality on Azure App Service

Seit dem Hafen hört nicht erlaubt ist, schlage ich vor, Sie hören stattdessen Speicherung in der Warteschlange. Alle Apps, die Nachrichten an Ihre WebJobs senden möchten, können eine Nachricht in den Warteschlangenspeicher einfügen. WebJobs SDK bietet eine einfache Möglichkeit für Sie, dies zu tun. Code unten ist für Ihre Referenz. Die folgende Methode wird ausgelöst, wenn eine Nachricht in die Warteschlange1 eingefügt wurde.

public static void ProcessQueueMessage([QueueTrigger("queue1")] string logMessage, TextWriter logger) 
{ 
    logger.WriteLine(logMessage); 
} 

Bitte beachten Sie auch an eine Warteschlange in Ihrem Knoten App hören und eine Nachricht in die Warteschlange ein, wenn Sie möchten, eine Nachricht senden zurück von Ihrem WebJobs an den Knoten App.

+0

Nach einer langen Zeit kam ich zurück, um dieses Problem zu lösen. Storage quensue funktionierte perfekt für mich. Eine weitere Option für die anderen so ähnlich (kein Port lauscht oder quenue erforderlich) tun: \t 1. Remake exe-Parameter über cmd Linie \t 2. Führen Sie exe von Knoten mit den Parametern, die Sie brauchen: \t \t 2.1 var exec = require ('child_process') .exec; \t \t 2.2 (exec ('test.exe {Parameter}', ['/ C'], Funktion (err, cmdOut, stderr) {) – Shpooke

Verwandte Themen