用webjobs调用另一个网站的api

时间:2016-07-21 18:45:21

标签: c# azure azure-webjobs

我是azure webjobs的新手,但我正在尝试使用它们在需要时对bing maps api进行api调用。最终这将由我的网站上的请求触发,但此刻我只是想弄清楚webjobs。我创建了一个控制台应用程序并手动将其作为webjob添加到示例网站。我所有的测试webjobs(简单的hello world类型的东西)都运行良好,但是当我尝试调用bing maps api时,webjob说它成功完成但只执行了部分代码。这是webjob的代码:

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的新手,所以任何简单的建议都会很棒。谢谢!

1 个答案:

答案 0 :(得分:3)

您可能需要等待响应发生。您正在调用“异步”方法,但静态入口点本身不支持在关闭可执行文件之前等待那些完成。试试这个:

(x, y)