为什么 HttpClient PostAsJsonAsync 退出 Azure Web 作业后没有 运行 代码?
Why does HttpClient PostAsJsonAsync exit Azure Web Job without running code after it?
我有一个使用 Azure SDK 构建的 Azure Web 作业,它的唯一工作是调用 Web 服务 (Web API),然后根据 return 值记录响应 (a class).问题在于,一旦它调用 HttpClient PostAsJsonAsync 方法来调用服务,它就会退出 Web 作业而不执行任何响应处理。我的代码是:
public class Result
{
// Properties ---------------------------------------------------------
public bool Success { get; set; }
public string Error { get; set; }
}
public class Functions
{
// This function will be triggered based on the schedule you have set for this WebJob
// This function will enqueue a message on an Azure Queue called queue
[NoAutomaticTrigger]
public async static void ManualTrigger(TextWriter log, int value)
{
using (var client = new HttpClient())
{
var rootUrl = ConfigurationManager.AppSettings.Get("WebJobTargetUrl");
client.BaseAddress = new System.Uri(rootUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Console.WriteLine("Call service");
var response = await client.PostAsJsonAsync("api/Reminder/ProcessDueReminders", new { ItemID = 1 });
Console.WriteLine("After service");
var result = await response.Content.ReadAsAsync<Result>();
Console.WriteLine("After result");
if (result.Success)
Console.WriteLine("Reminders Processed");
else
Console.WriteLine("Reminder process error: " + result.Error);
}
}
}
来自门户的执行日志是:
我相信它与异步操作有关,但我想不出可行的模式。任何帮助将不胜感激。
您的 PostAsJsonAsync 调用中可能存在异常。尝试对其进行 try catch 并记录错误:
try {
var response = await client.PostAsJsonAsync("api/Reminder/ProcessDueReminders", new { ItemID = 1 });
} catch (Exception ex){
Console.WriteLine("Exception: "+ ex);
}
Console.WriteLine("After service");
您必须将自己的异步方法的 return 值定义为 Task
而不是 void
。
在相关说明中,您应该在方法名称后加上 Async
后缀。这不会解决问题,但它表明您正在使用 async/await 模式。
我有一个使用 Azure SDK 构建的 Azure Web 作业,它的唯一工作是调用 Web 服务 (Web API),然后根据 return 值记录响应 (a class).问题在于,一旦它调用 HttpClient PostAsJsonAsync 方法来调用服务,它就会退出 Web 作业而不执行任何响应处理。我的代码是:
public class Result
{
// Properties ---------------------------------------------------------
public bool Success { get; set; }
public string Error { get; set; }
}
public class Functions
{
// This function will be triggered based on the schedule you have set for this WebJob
// This function will enqueue a message on an Azure Queue called queue
[NoAutomaticTrigger]
public async static void ManualTrigger(TextWriter log, int value)
{
using (var client = new HttpClient())
{
var rootUrl = ConfigurationManager.AppSettings.Get("WebJobTargetUrl");
client.BaseAddress = new System.Uri(rootUrl);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Console.WriteLine("Call service");
var response = await client.PostAsJsonAsync("api/Reminder/ProcessDueReminders", new { ItemID = 1 });
Console.WriteLine("After service");
var result = await response.Content.ReadAsAsync<Result>();
Console.WriteLine("After result");
if (result.Success)
Console.WriteLine("Reminders Processed");
else
Console.WriteLine("Reminder process error: " + result.Error);
}
}
}
来自门户的执行日志是:
我相信它与异步操作有关,但我想不出可行的模式。任何帮助将不胜感激。
您的 PostAsJsonAsync 调用中可能存在异常。尝试对其进行 try catch 并记录错误:
try {
var response = await client.PostAsJsonAsync("api/Reminder/ProcessDueReminders", new { ItemID = 1 });
} catch (Exception ex){
Console.WriteLine("Exception: "+ ex);
}
Console.WriteLine("After service");
您必须将自己的异步方法的 return 值定义为 Task
而不是 void
。
在相关说明中,您应该在方法名称后加上 Async
后缀。这不会解决问题,但它表明您正在使用 async/await 模式。