Skip to main content
 首页 » 编程设计

c#之用webjobs调用其他网站的api

2024年04月18日43emanlee

我是 azure webjobs 的新手,但我正在尝试使用它们在需要时对 bing map api 进行 api 调用。最终这将由我网站上的请求触发,但目前我只是想弄清楚 webjobs。我创建了一个控制台应用程序并将其作为 Web 作业手动添加到示例网站。我所有的测试 webjobs(简单的 hello world 类型的东西)都运行良好,但是当我尝试调用 bing maps api 时,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 中运行它时,一切正常,并且正确的东西被打印到控制台等。

当我压缩它并将其添加为网络作业时,api 调用要么没有发生,要么网络作业在它发生之前就完成了。当我在运行后查看日志时,我看到控制台消息“我即将调用”发生,然后状态更改为成功并且 webjob 完成而没有运行任何其余代码。像这样的 webjob 是否不能与 api 调用一起使用,或者我只是做错了什么并且有修复?同样,我是 webjobs 的新手,所以任何简单的建议都会很棒。谢谢!

请您参考如下方法:

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

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); 
}