【发布时间】:2017-04-22 03:28:38
【问题描述】:
我正在构建一个 Azure Webjob,它将数据从我的 blob 存储发布到在我的客户端环境上运行的其他(非天蓝色)Web 服务。 此 http-POST 的处理可能需要很长时间(最多至少 30 分钟),这很好,因为没有用户在等待此过程完成。
经过一天的谷歌搜索和测试,我的测试看起来像这样。
- Webservice有一个测试方法,等待10分钟后返回。
- Azure Webjob 将使用
System.Net.Http.HttpClient调用测试方法,Timeout设置为 11 分钟。 - 在父 Azure Web 应用中,
ApplicationSettings下,Always On设置为 true,应用设置WEBJOBS_IDLE_TIMEOUT设置为3600。 - 当 Azure Webjob 等待时,它将每秒执行一次
Console.WriteLine("Heartbeat")(以解决空闲 cpu 时间)。
这将导致System.Threading.Tasks.TaskCanceledException: A task was canceled. 当我从 Visual Studio 运行相同的测试时,它会在等待 10 分钟后成功完成。
我错过了什么吗?怎么回事?
编辑:包括我的测试代码,以及异常和堆栈跟踪。
private static async Task<String> AzureWebJobTest()
{
var url = "[MyUrl]";
var json = new StringContent("[MyValidJSON]", Encoding.UTF8, "application/json");
var client = new HttpClient();
client.Timeout = TimeSpan.FromMinutes(11);
return await (await client.PostAsync(url, json)).Content.ReadAsStringAsync();
}
以及这个函数抛出的异常:
System.Threading.Tasks.TaskCanceledException: A task was canceled.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at [MyProjectNamespace].Program.<AzureWebJobTest>d__5.MoveNext() in [MyLocalPath]\Program.cs:line 100
【问题讨论】:
-
您是否尝试过在您的 Azure Web 应用程序中增加 SCM_COMMAND_IDLE_TIMEOUT?
-
您好@iikkoo,感谢您的建议,但不幸的是它没有奏效。结果相同
-
你能发布完整的异常和跟踪吗?
-
您是否尝试减少Webservice返回值的等待时间并检查是否会出现相同的问题?另外,持续WebJobs支持Remote debugging feature,请尝试调试代码找到导致错误的代码sn-p。
-
@fred-han-msft,我已经尝试了您的建议并创建了一个连续的 WebJob 并连接了远程调试器。我已经验证确实是
client.PostAsync引发了异常。此外,当我将 Web 服务的延迟降低到 3 分钟或更短时,不会引发异常。
标签: c# azure timeout http-post azure-webjobs