2016-07-21 22 views
1

Ich bin neu in azurblauen Webjobs, aber ich versuche, sie zu verwenden, um einen API-Aufruf an die Bing Maps API, wenn ich es brauche. Letztendlich wird dies durch eine Anfrage auf meiner Webseite ausgelöst, aber im Moment versuche ich nur Webjobs zu finden. Ich habe eine Konsolen-App erstellt und sie manuell als Web-Job einer Beispiel-Website hinzugefügt. Alle meine Test-Webjobs (einfache Hello-World-Type-Dinge) haben gut funktioniert, aber wenn ich versuche, die Bing Maps API aufzurufen, sagt der Webjob, dass er erfolgreich ausgeführt wurde, aber nur ein Teil des Codes ausgeführt wurde. Hier ist der Code für das webjob:Rufen Sie die Website einer anderen Website

class Program 
{ 
    static void Main(string[] args) 
    { 
     Program p = new Program(); 
     p.MakeAsync(); 
    } 

    public async void MakeAsync() 
    { 
     Console.WriteLine("I'm about to call"); 
     CallMe c = new CallMe(); 
     bool x = await c.CallBingMapsAsync(49931); 
     Console.WriteLine("I called and the result was {0}", x); 
    } 
} 

public class CallMe 
{ 
    public async Task<bool> CallBingMapsAsync(int zip) 
    {  
     RootOb lookups = await BingMaps.GetLocations(zip); 
     Resource here = lookups.resourceSets[0].resources[0]; 
     string city = here.address.locality; 
     double lat = here.point.coordinates[0]; 
     double lon = here.point.coordinates[1]; 
     Console.WriteLine("I looked up {0} and found it at ({1} N, {2} W).",city, lat, lon); 
     return true; 
    } 
} 

BingMaps.GetLocations() die Daten abruft und wandelt es in ein Objektformat. Wenn ich das in Visual Studio ausführe, funktioniert alles einwandfrei und die richtigen Dinge werden auf die Konsole usw. gedruckt.

Wenn ich zip dies und fügen Sie es als Webjob, der API-Aufruf entweder nicht auftritt, oder der Webjob beendet bevor es passiert. Wenn ich das Protokoll nach dem Ausführen ansehe, sehe ich die Konsolennachricht "Ich werde kurz anrufen" und dann wird der Status in Erfolg geändert und der Webjob wird beendet, ohne dass der Rest des Codes ausgeführt wird. Funktioniert ein Webjob wie dieser nicht mit einem API-Anruf, oder mache ich gerade etwas falsch und es gibt eine Lösung? Wieder bin ich neu bei Webjobs, also wäre jeder einfache Ratschlag großartig. Vielen Dank!

Antwort

3

Sie müssen wahrscheinlich auf die Antwort warten. Sie rufen "async" -Methoden auf, aber der statische Einstiegspunkt unterstützt nicht automatisch das Warten darauf, dass diese beendet werden, bevor die ausführbare Datei geschlossen wird. Versuchen Sie Folgendes:

static void Main(string[] args) 
{ 
    Program p = new Program(); 
    p.MakeAsync().Wait(); 
} 

public async Task MakeAsync() 
{ 
    Console.WriteLine("I'm about to call"); 
    CallMe c = new CallMe(); 
    bool x = await c.CallBingMapsAsync(49931); 
    Console.WriteLine("I called and the result was {0}", x); 
}