2016-07-21 25 views
1

我是新來的azure webjobs,但我正嘗試使用它們在我需要時使api調用bing地圖api。最終,這將由我的網站上的請求觸發,但目前我只是想弄清楚webjobs。我創建了一個控制檯應用程序,並手動將其作爲webjob添加到示例網站。我所有的測試webjobs(簡單的hello世界類型的東西)都工作得很好,但是當我嘗試調用bing地圖api時,webjob說它已成功完成,但只執行了一部分代碼。下面是webjob的代碼:用webjobs調用另一個網站的api

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()檢索數據,並將其轉換爲一個對象的格式。當我在Visual Studio中運行它時,一切正常,並且正確的東西被打印到控制檯等。

當我壓縮這個並將其添加爲webjob時,api調用要麼不會發生,要麼webjob完成在它發生之前。當我在運行後查看日誌時,發現控制檯消息「我即將致電」,然後狀態更改爲成功,Webjob完成而無需運行任何其他代碼。像這樣的webjob不能用api調用,還是我只是做錯了什麼,有一個修復?再次,我是webjobs的新手,所以任何簡單的建議都會很棒。謝謝!

回答

3

您可能需要等待響應發生。您正在調用「異步」方法,但靜態入口點本身並不支持在關閉可執行文件之前等待它們完成。試試這個:

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); 
} 
相關問題